Ngemuva konyaka wokuthuthuka, i-Nim 1.6, ulimi lokuhlela izinhlelo, isikhishwe. Isebenzisa ukuthayipha okumile futhi yakhiwe kucatshangwa nge-Pascal, C++, Python, ne-Lisp. Ikhodi yomthombo we-Nim ihlanganiswa ibe yi-C, C++, noma i-JavaScript. Ikhodi ye-C/C++ ewumphumela ibe isihlanganiswa ibe yinto esebenzisekayo kusetshenziswa noma iyiphi inhlanganisela etholakalayo (clang, gcc, icc, Visual C++), ukufeza ukusebenza eduze no-C, ngaphandle kwezindleko zokuqoqwa kukadoti. Ngokufana ne-Python, i-Nim isebenzisa ukuhlehlisa njengama-block delimiters. Amathuluzi e-Metaprogramming namandla okudala izilimi eziqondene nesizinda (ama-DSL) ayasekelwa. Ikhodi yephrojekthi ilayisensi ngaphansi kwelayisense ye-MIT.
Izinguquko eziphawulekayo ekukhishweni okusha zihlanganisa:
- Kwengezwe ikilasi le-iterable[T] elinohlobo 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).sum'
- 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.}," yethuliwe, evumela ukungenisa hhayi kuphela izimpawu zomphakathi kodwa neziyimfihlo. Imojula ye-std/importutils kanye ne-privateAccess API yengeziwe ukuze ufinyelele izinkambu zento eyimfihlo. 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 ukuthi j.?a1.?a2.getInt == 10
- Amapharamitha engeziwe avunyelwe kuma-agumenti e-block. isifanekiso fn(a = 1, b = 2, body1, body2) = lahla i-fn(a = 1): ibha1 yenza: ibha2
- Usekelo olusetshenziswayo lwemibhalo echazwe ngumsebenzisi (isb. "-128'bignum'"). func `'big`*(inombolo: cstring): JsBigInt {.importjs: "BigInt(#)".} qinisekisa ukuthi 0xffffffffffffffffff'big == (1'big shl 64'big) - 1'big
- Umhlanganisi usebenzisa umyalo "--eval:cmd" wokusebenzisa imiyalo ye-Nim ngokuqondile emugqeni womyalo, isibonelo 'nim --eval:"echo 1"'.
- Usekelo lunikeziwe lokudala izandiso zangokwezifiso ze-nimscript backend.
- Imilayezo yephutha inwetshwe kakhulu ukuze ifake phakathi okuqukethwe okuhlobene nephutha. Izexwayiso zeqoqo elilungisekayo sezisetshenzisiwe.
- Ukusebenza kweziqoqi zikadoti "--gc:arc" kanye ne-"--gc:orc" kuthuthukiswe kakhulu.
- Ukunemba nokusebenza kwekhodi yokuhlaziya ephelele kanye nephuzu elintantayo kuthuthukisiwe kuwo wonke ama-backend.
- Ukusebenzisana okuthuthukisiwe phakathi kwe-JS, VM, ne-nimscript backends namamojula ngaphambilini abesekela i-backend C (isb., imojula ye-std/prelude). Ukuhlolwa kwamamojula we-stdlib nge-C, JS, ne-VM backends kuthuthukisiwe.
- Ukwesekwa okwengeziwe kwe-Apple Silicon/M1 chip, 32-bit RISC-V, armv8l kanye nezinhlelo ze-CROSSOS.
- Amamojula we-std/jsbigints, std/temfiles, kanye ne-std/sysrand angeziwe. Ukuthuthukiswa okuphawulekayo kwenziwe kusistimu, izibalo, okungahleliwe, i-json, i-jsonutils, i-os, i-typetraits, i-wranils, izinhlu, namamojula we-hashes.
Source: opennet.ru
