Baada ya mwaka wa maendeleo, Nim 1.6, lugha ya programu ya mifumo, imetolewa. Inatumia uchapaji tuli na imejengwa kwa kuzingatia Pascal, C++, Python, na Lisp. Nambari ya chanzo cha Nim imeundwa kuwa C, C++, au JavaScript. Kisha nambari inayotokana ya C/C++ inakusanywa kuwa inayoweza kutekelezeka kwa kutumia mkusanyaji wowote unaopatikana (clang, gcc, icc, Visual C++), kufikia utendakazi karibu na C, bila kujumuisha gharama ya ukusanyaji wa takataka. Sawa na Python, Nim hutumia ujongezaji kama vidhibiti vya kuzuia. Zana za kupanga metaprogramu na uwezo wa kuunda lugha mahususi za kikoa (DSLs) zinatumika. Msimbo wa mradi umeidhinishwa chini ya leseni ya MIT.
Mabadiliko makubwa katika toleo jipya ni pamoja na:
- Imeongeza darasa la iterable[T] na utekelezaji wa aina kwa warudiaji. template sum[T](a: iterable[T]): T = var tokeo: T kwa ai katika: tokeo += ai tokeo la kudai jumla (iota(3)) == 0 + 1 + 2 # au 'iota(3).sum'
- Umeongeza usaidizi wa majaribio wa vidokezo vya ".effectsOf" kwa madoido kwa kuchagua. when defined(nimHasEffectsOf): {.majaribio: "strictEffects".} vinginevyo: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp.}
- Sintaksia mpya ya kuagiza, "import foo {.all.}," imeanzishwa, ikiruhusu kuingiza sio tu alama za umma bali pia za kibinafsi. Moduli ya std/importutils na API ya Ufikiaji wa faragha zimeongezwa kwa ajili ya kufikia sehemu za kitu cha faragha. kutoka kwa mfumo {.all.} kama system2 kuleta nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
- Umeongeza usaidizi wa majaribio kwa waendeshaji nukta, ambao unaweza kutumika kutekeleza sehemu zinazobadilika. import std/json template '.?'(a: JsonNode, b: haijachapishwa{ident}): JsonNode = a[astToStr(b)] let j = %*{"a1": {"a2": 10}} kudai j.?a1.?a2.getInt == 10
- Vigezo vya ziada vinaruhusiwa katika hoja za kuzuia. kiolezo fn(a = 1, b = 2, body1, body2) = tupa fn(a = 1): bar1 fanya: bar2
- Usaidizi uliotekelezwa wa maandishi halisi yaliyofafanuliwa na mtumiaji (k.m. "-128'bignum'"). func `'big`*(idadi: cstring): JsBigInt {.importjs: "BigInt(#)".} kudai 0xffffffffffffffffff'big == (1'shl kubwa 64'big) - 1'big
- Mkusanyaji hutekeleza amri "--eval:cmd" kwa kuendesha moja kwa moja amri za Nim kutoka kwa safu ya amri, kwa mfano 'nim --eval:"echo 1"'.
- Usaidizi umetolewa kwa ajili ya kuunda viendelezi maalum kwa nimscript backend.
- Ujumbe wa hitilafu umepanuliwa kwa kiasi kikubwa ili kujumuisha muktadha unaohusiana na hitilafu. Maonyo ya mkusanyaji wa kusanidi yametekelezwa.
- Utendaji wa wakusanyaji wa "--gc:arc" na "--gc:orc" umeboreshwa kwa kiasi kikubwa.
- Usahihi na utendakazi wa msimbo kamili na wa uchanganuzi wa sehemu inayoelea umeboreshwa katika sehemu zote za nyuma.
- Upatanifu ulioboreshwa kati ya nakala za nyuma za JS, VM, na nimscript na moduli ambazo hapo awali ziliunga mkono mazingira ya C (k.m., moduli ya std/prelude). Majaribio ya moduli za stdlib na viambajengo vya C, JS, na VM vimeboreshwa.
- Usaidizi ulioongezwa kwa chip ya Apple Silicon/M1, mifumo ya 32-bit RISC-V, armv8l na CROSSOS.
- Moduli za std/jsbigints, std/temfiles, na std/sysrand zimeongezwa. Maboresho makubwa yamefanywa kwa mfumo, hesabu, nasibu, json, jsonutils, os, aina za herufi, maandishi, orodha na moduli za heshi.
Chanzo: opennet.ru
