Liberasyon langaj pwogramasyon Nim 1.6.0

Apre yon ane nan devlopman, yo te pibliye liberasyon an nan langaj pwogramasyon sistèm Nim 1.6, ki itilize sezisman estatik epi li te kreye ak yon je sou Pascal, C++, Python ak Lisp. Kòd sous Nim konpile nan yon reprezantasyon C, C++, oswa JavaScript. Imedyatman, kòd C/C++ ki kapab lakòz yo konpile nan yon dosye ègzèkutabl lè l sèvi avèk nenpòt du ki disponib (clang, gcc, icc, Visual C++), ki pèmèt ou reyalize pèfòmans tou pre C, si ou pa pran an kont depans pou kouri. pèseptè fatra a. Menm jan ak Python, Nim itilize endentasyon kòm delimiter blòk. Zouti metaprogramasyon ak kapasite pou kreye lang espesifik domèn (DSL) yo sipòte. Kòd pwojè a bay anba lisans MIT.

Chanjman remakab nan nouvo lage a enkli:

  • Te ajoute klas iterable[T] ak yon aplikasyon tip pou iteratè. sòm modèl[T](a: iterable[T]): T = var rezilta: T pou ai nan yon: rezilta += ai rezilta afime sòm(iota(3)) == 0 + 1 + 2 # oswa 'iota( 3).som'
  • Te ajoute sipò eksperimantal pou ".effectsOf" anotasyon pou aplike efè selektivman. lè defini (nimHasEffectsOf): {.experimental: "strictEffects".} lòt bagay: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Yon nouvo sentaks enpòte "import foo {.all.}" te pwopoze, ki pèmèt ou enpòte non sèlman senbòl piblik, men tou prive. Pou jwenn aksè nan jaden prive objè yo, yo te ajoute modil std/importutils ak API privateAccess. soti nan sistèm {.all.} kòm system2 enpòte nil echo system2.ThisIsSystem enpòte os {.all.} echo weirdTarget
  • Te ajoute sipò eksperimantal pou operatè pwen, ki ka itilize pou aplike jaden dinamik. enpòte modèl std/json '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] kite j = %*{“a1”: {“a2”: 10}} afime j.?a1.?a2.getInt == 10
  • Lòt paramèt yo ka espesifye nan agiman blòk. modèl fn(a = 1, b = 2, kò1, kò2) = jete fn (a = 1): bar1 fè: ba2
  • Yo te aplike sipò pou literal itilizatè yo (pa egzanp, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} afime 0xffffffffffffff'big == (1'gwo shl 64'gwo) - 1'gwo
  • Konpilatè a aplike kòmandman "—eval:cmd" la pou li dirèkteman kouri kòmandman Nim nan liy lòd la, pou egzanp 'nim -eval:"echo 1"'.
  • Bay sipò pou kreye pwòp ekstansyon ou pou backend nimscript la.
  • Mesaj erè yo te elaji anpil pou montre kontèks ki asosye ak erè a. Aplike avètisman konpilatè koutim.
  • Siyifikativman amelyore pèfòmans nan "--gc: arc" ak "--gc: orc" yo.
  • Tout backend yo amelyore presizyon ak pèfòmans kòd pou analize nonm antye ak nimewo k ap flote.
  • Amelyore konpatibilite nan backend JS, VM ak nimscript ak modil ki te deja travay sèlman ak backend C a (pa egzanp, modil std/prelude). Yo te etabli tès modil stdlib ak backend C, JS ak VM.
  • Te ajoute sipò pou Apple Silisyòm/M1 chip, 32-bit RISC-V, armv8l ak sistèm CROSSOS.
  • Te ajoute modil std/jsbigints, std/tempfiles ak std/sysrand. Amelyorasyon enpòtan yo te fè nan sistèm nan, matematik, o aza, json, jsonutils, os, typetraits, wrapnils, lis ak hashes.

Sous: opennet.ru

Add nouvo kòmantè