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