Rilis basa pamrograman Nim 1.6.0

Sawise setahun pembangunan, release saka basa pemrograman sistem Nim 1.6 diterbitake, kang nggunakake typing statis lan digawe karo mripat ing Pascal, C ++, Python lan Lisp. Kode sumber Nim dikompilasi dadi perwakilan C, C++, utawa JavaScript. Sabanjure, asil C / C ++ kode dikompilasi menyang file eksekusi nggunakake sembarang compiler kasedhiya (clang, gcc, icc, Visual C ++), sing ngijini sampeyan kanggo entuk kinerja cedhak C, yen sampeyan ora njupuk menyang akun biaya mlaku. tukang sampah. Kaya Python, Nim nggunakake indentasi minangka pemisah blok. Alat lan kemampuan metaprogramming kanggo nggawe basa khusus domain (DSL) didhukung. Kode proyek diwenehake miturut lisensi MIT.

Owah-owahan penting ing rilis anyar kalebu:

  • Nambahake kelas iterable [T] kanthi implementasi jinis kanggo iterator. template sum[T](a: iterable[T]): T = var asil: T kanggo ai ing: asil += ai asil negesake jumlah(iota(3)) == 0 + 1 + 2 # utawa 'iota( 3) sum'
  • Dhukungan eksperimen ditambahake kanggo anotasi ".effectsOf" kanggo ngetrapake efek kanthi selektif. nalika ditetepake (nimHasEffectsOf): {.eksperimen: "strictEffects".} liya: {.pragma: effectsOf.} proc mysort (s: seq; cmp: proc (a, b: T): int) {.effectsOf: cmp. }
  • Sintaks impor anyar "import foo {.all.}" wis diusulake, ngidini sampeyan ngimpor ora mung umum, nanging uga simbol pribadi. Kanggo ngakses kolom pribadi obyek, modul std/importutils lan privateAccess API wis ditambahake. saka sistem {.all.} minangka system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Dhukungan eksperimen ditambahake kanggo operator titik, sing bisa digunakake kanggo ngetrapake lapangan dinamis. import std/json template '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{β€œa1”: {β€œa2”: 10}} j.?a1.?a2.getInt == 10
  • Parameter tambahan bisa ditemtokake ing argumen blok. cithakan fn(a = 1, b = 2, body1, body2) = buang fn(a = 1): bar1 do: bar2
  • Dhukungan kanggo literal sing ditemtokake pangguna wis ditindakake (contone, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) β€” 1'big
  • Compiler nindakake printah "--eval: cmd" kanggo langsung mbukak printah Nim saka baris printah, contone 'nim -eval:"echo 1"'.
  • Nyedhiyakake dhukungan kanggo nggawe ekstensi dhewe kanggo backend nimscript.
  • Pesen kesalahan wis ditambahi banget kanggo nuduhake konteks sing ana gandhengane karo kesalahan kasebut. Dilaksanakake bebaya kompiler khusus.
  • Kinerja sing luwih apik saka "--gc:arc" lan "--gc:orc" pengumpul sampah.
  • Kabeh backend wis nambah akurasi lan kinerja kode kanggo parsing integer lan nomer floating point.
  • Peningkatan kompatibilitas JS, VM lan backend nimscript karo modul sing sadurunge mung bisa digunakake karo backend C (contone, modul std / prelude). Pengujian modul stdlib kanthi backend C, JS lan VM wis ditetepake.
  • Dhukungan tambahan kanggo chip Apple Silicon/M1, RISC-V 32-bit, armv8l lan sistem CROSSOS.
  • Ditambahake modul std / jsbigints, std / tempfiles lan std / sysrand. Dandan sing signifikan wis digawe kanggo modul sistem, math, acak, json, jsonutils, os, typetraits, wrapnils, dhaptar lan hashes.

Source: opennet.ru

Add a comment