Ukukhishwa kolimi lohlelo lwe-Nim 1.6.0

Ngemva konyaka wentuthuko, kwashicilelwa ukukhululwa kolimi lwezinhlelo zesistimu i-Nim 1.6, esebenzisa ukuthayipha okumile futhi kwadalwa ngeso ku-Pascal, C++, Python kanye ne-Lisp. Ikhodi yomthombo we-Nim ihlanganiswa ibe isethulo se-C, C++, noma i-JavaScript. Kamuva, ikhodi ye-C/C++ ewumphumela ihlanganiswa ibe ifayela elisebenzisekayo kusetshenziswa noma iyiphi i-compiler etholakalayo (clang, gcc, icc, Visual C++), ekuvumela ukuthi ufeze ukusebenza eduze no-C, uma ungacabangi izindleko zokusebenza. umqoqi wezibi. Ngokufana ne-Python, i-Nim isebenzisa i-indentation njengama-block delimiters. Amathuluzi e-Metaprogramming namandla okudala izilimi eziqondene nesizinda (ama-DSL) ayasekelwa. Ikhodi yephrojekthi inikezwa ngaphansi kwelayisensi ye-MIT.

Izinguquko eziphawulekayo ekukhishweni okusha zihlanganisa:

  • Kwengezwe ikilasi le-iterable[T] ngohlobo lokusetshenziswa lwabaphindayo. isifanekiso isamba[T](a: iterable[T]): T = var umphumela: T for ai ku: umphumela += Ai umphumela ukugomela isamba (iota(3)) == 0 + 1 + 2 # noma 'iota( 3). Isamba'
  • Kwengezwe usekelo lokuhlola lwezichasiselo ze-".effectsOf" zemiphumela ekhethiwe. when defined(nimHasEffectsOf): {.experimental: "strictEffects".} okunye: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • I-syntax entsha yokungenisa "import foo {.all.}" ihlongoziwe, okukuvumela ukuba ungangenisi nje kuphela esidlangalaleni, kodwa nezimpawu eziyimfihlo. Ukuze ufinyelele izinkambu eziyimfihlo zezinto, imojuli ye-std/importutils kanye ne-privateAccess API yengeziwe. kusuka ohlelweni {.all.} njengokungenisa kwesistimu2 nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Kwengezwe usekelo lokuhlola lwama-opharetha wamachashazi, angasetshenziswa ukuze kusetshenziswe izinkambu eziguqukayo. ngenisa isifanekiso se-std/json '.?'(a: JsonNode, b: ayibhalwanga{ident}): JsonNode = a[astToStr(b)] let j = %*{β€œa1”: {β€œa2”: 10}} qinisekisa j.?a1.?a2.getInt == 10
  • Amapharamitha engeziwe angacaciswa kuma-block agumenti. isifanekiso fn(a = 1, b = 2, body1, body2) = lahla i-fn(a = 1): ibha1 yenza: ibha2
  • Ukusekela kwamagama achazwe ngumsebenzisi kuqalisiwe (isibonelo, "-128'bignum'"). func `'big`*(inombolo: cstring): JsBigInt {.importjs: "BigInt(#)".} qinisekisa ukuthi 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Umhlanganisi usebenzisa umyalo othi β€œβ€”eval:cmd” ukuze asebenzise imiyalo ye-Nim ngokuqondile emgqeni womyalo, isibonelo β€˜nimβ€”eval:”echo 1β€³β€˜.
  • Kunikezwe ukwesekwa kokudala izandiso zakho ze-nimscript backend.
  • Imilayezo yephutha inwetshwe kakhulu ukuze kuboniswe umongo ohlobene nephutha. Kusetshenziswe izexwayiso zesihlanganisi ngokwezifiso.
  • Ukusebenza okuthuthuke kakhulu kwe-"--gc:arc" kanye ne-"--gc:orc" yabaqoqi bakadoti.
  • Wonke ama-backend athuthukise ukunemba nokusebenza kwekhodi yokuhlukanisa izinombolo nezinombolo zamaphoyinti antantayo.
  • Ukuhambisana okuthuthukisiwe kwe-JS, i-VM kanye ne-nimscript backends enamamojula ngaphambili ayesebenza kuphela ne-backend C (isibonelo, imojula ye-std/prelude). Ukuhlolwa kwamamojula we-stdlib ane-C, JS ne-VM backends sekusunguliwe.
  • Ukwesekwa okwengeziwe kwe-Apple Silicon/M1 chip, 32-bit RISC-V, armv8l kanye nezinhlelo ze-CROSSOS.
  • Kungezwe amamojula std/jsbigints, std/temfiles kanye std/sysrand. Ukuthuthukiswa okuphawulekayo kwenziwe kusistimu, izibalo, okungahleliwe, i-json, i-jsonutils, i-os, i-typetraits, ama-wranils, izinhlu namamojula we-hashes.

Source: opennet.ru

Engeza amazwana