Ukukhutshwa kolwimi lwenkqubo lweNim 1.6.0

Emva konyaka wophuhliso, ukukhutshwa kwenkqubo yolwimi lwenkqubo i-Nim 1.6 yapapashwa, esebenzisa ukuchwetheza okumileyo kwaye yenziwa ngeliso kwiPascal, C ++, Python kunye neLisp. Ikhowudi yemvelaphi ye-Nim ihlanganiswe ibe yi-C, C++, okanye i-JavaScript emele. Emva koko, ikhowudi yeC / C ++ enesiphumo iqulunqwe kwifayile ephunyezwayo usebenzisa nayiphi na i-compiler ekhoyo (clang, gcc, icc, Visual C ++), ekuvumela ukuba ufezekise ukusebenza kufutshane neC, ukuba awuyikuqwalasela iindleko zokuqhuba. umqokeleli wenkunkuma. Ngokufana nePython, iNim isebenzisa i-indentation njenge-block delimiters. Izixhobo zeMetaprogramming kunye nesakhono sokwenza iilwimi ezithe ngqo kwisizinda (DSLs) ziyaxhaswa. Ikhowudi yeprojekthi inikezelwa phantsi kwelayisenisi ye-MIT.

Utshintsho oluqaphelekayo kukhupho olutsha lubandakanya:

  • Yongezwe iklasi ephindaphindwayo[T] ngohlobo lophumezo lokuphinda-phinda. template sum[T](a: iterable[T]): T = var isiphumo: T ye ai kwi: result += ai result assert sum (iota(3)) == 0 + 1 + 2 # okanye 'iota( 3).
  • Inkxaso yovavanyo eyongeziweyo ye ".effectsOf" amanqakwana okusetyenziswa ngokukhethiweyo iziphumo. xa ichazwa(nimHasEffectsOf): {.experimental: "strictEffects".} enye into: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Isivakalisi esitsha sokungenisa "import foo {.all.}" sele sicetyiwe, esikuvumela ukuba ungenise hayi nje kawonke wonke, kodwa neempawu zabucala. Ukufikelela kwimimandla yabucala yezinto, imodyuli ye-std/importutils kunye ne-PrivateAccess API yongeziwe. isuka kwinkqubo {.all.} njengenkqubo2 yokungenisa nil echo system2.ThisIsSystem yokungenisa os {.all.} echo weirdTarget
  • Inkxaso yovavanyo eyongeziweyo yabasebenzisi bamachaphaza, enokusetyenziswa ukuphumeza imimandla eguquguqukayo. ngenisa i-std/json ithempleyithi '.?'(a: JsonNode, b: engabhalwanga{ident}): JsonNode = a[astToStr(b)] yeka j = %*{β€œa1”: {β€œa2”: 10}} qinisekisa j.?a1.?a2.getInt == 10
  • Iiparamitha ezongezelelweyo zinokuchazwa kwiimpikiswano zebhloko. template fn(a = 1, b = 2, body1, body2) = lahla fn(a = 1): bar1 yenza: bar2
  • Inkxaso yemibhalo echazwe ngumsebenzisi iphunyeziwe (umzekelo, "-128'bignum'"). func `'big`*(inani: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Umqokeleli usebenzisa "--eval:cmd" umyalelo wokuqhuba ngokuthe ngqo iNim imiyalelo esuka kumgca womyalelo, umzekelo 'nim -eval:"echo 1"'.
  • Ubonelele ngenkxaso yokudala ezakho izandiso ze-nimscript backend.
  • Imiyalezo yemposiso yandisiwe kakhulu ukubonisa umxholo onxulunyaniswa nempazamo. Ziphunyeziwe izilumkiso zomqokeleli wesiko.
  • Kuphuculwe kakhulu ukusebenza kwe-"--gc:arc" kunye ne-"--gc:orc" abaqokeleli benkunkuma.
  • Zonke ii-backends ziphucule ukuchaneka kunye nokusebenza kwekhowudi yokwahlulahlula amanani kunye namanani amanqaku adadayo.
  • Ukuphucula ukuhambelana kwe-JS, i-VM kunye ne-nimscript backends kunye neemodyuli ebezisebenza ngaphambili kuphela nge-backend ye-C (umzekelo, imodyuli ye-std/prelude). Uvavanyo lweemodyuli ze-stdlib ezine-C, JS kunye ne-VM backends zisekiwe.
  • Inkxaso eyongeziweyo ye-Apple Silicon / M1 chip, i-32-bit RISC-V, i-armv8l kunye neenkqubo ze-CROSSOS.
  • Iimodyuli ezongeziweyo std/jsbigints, std/tempfiles kunye ne-std/sysrand. Uphuculo olubalulekileyo lwenziwe kwisistim, izibalo, i-random, i-json, i-jsonutils, i-os, i-typetraits, i-wranils, uluhlu kunye neemodyuli ze-hashes.

umthombo: opennet.ru

Yongeza izimvo