Toleo la lugha ya programu ya Nim 1.6.0

Baada ya mwaka wa maendeleo, kutolewa kwa lugha ya programu ya mfumo Nim 1.6 ilichapishwa, ambayo inatumia uchapaji tuli na iliundwa kwa jicho la Pascal, C ++, Python na Lisp. Msimbo wa chanzo wa Nim umeundwa kuwa uwakilishi wa C, C++, au JavaScript. Baadaye, nambari inayotokana ya C/C++ inakusanywa kuwa faili inayoweza kutekelezwa kwa kutumia mkusanyaji wowote unaopatikana (clang, gcc, icc, Visual C++), ambayo hukuruhusu kufikia utendaji karibu na C, ikiwa hautazingatia gharama za kuendesha. mkusanya takataka. Sawa na Python, Nim hutumia ujongezaji kama vizuizi vya kuzuia. Zana za kupanga metaprogramu na uwezo wa kuunda lugha mahususi za kikoa (DSLs) zinatumika. Nambari ya mradi imetolewa chini ya leseni ya MIT.

Mabadiliko makubwa katika toleo jipya ni pamoja na:

  • Imeongeza darasa la iterable[T] na aina ya utekelezaji wa viboreshaji. 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).jumla'
  • Umeongeza usaidizi wa majaribio wa vidokezo vya ".effectsOf" kwa madoido kwa kuchagua. when defined(nimHasEffectsOf): {.experimental: "strictEffects".} vinginevyo: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Sintaksia mpya ya kuagiza "import foo {.all.}" imependekezwa, kukuruhusu kuingiza sio tu alama za umma, lakini pia za kibinafsi. Ili kufikia sehemu za kibinafsi za vitu, moduli ya std/importutils na API ya ufikiaji wa kibinafsi imeongezwa. 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 vinaweza kubainishwa katika hoja za kuzuia. kiolezo fn(a = 1, b = 2, body1, body2) = tupa fn(a = 1): bar1 fanya: bar2
  • Usaidizi wa maandishi yaliyofafanuliwa na mtumiaji umetekelezwa (kwa mfano, "-128'bignum'"). func `'big`*(nambari: cstring): JsBigInt {.importjs: "BigInt(#)".} kudai 0xffffffffffffff'big == (1'shl kubwa 64'big) - 1'big
  • Mkusanyaji hutekeleza amri ya β€œβ€”eval:cmd” ili kuendesha moja kwa moja amri za Nim kutoka kwa safu ya amri, kwa mfano β€˜nimβ€”eval:”echo 1β€³β€˜.
  • Imetoa usaidizi wa kuunda viendelezi vyako vya maandishi ya nyuma.
  • Ujumbe wa hitilafu umepanuliwa sana ili kuonyesha muktadha unaohusishwa na hitilafu. Maonyo ya mkusanyaji maalum yaliyotekelezwa.
  • Utendaji ulioboreshwa kwa kiasi kikubwa wa "--gc:arc" na "--gc:orc" wakusanyaji taka.
  • Viunga vyote vya nyuma vimeboresha usahihi na utendakazi wa msimbo wa kuchanganua nambari kamili na nambari za sehemu zinazoelea.
  • Upatanifu ulioboreshwa wa JS, VM na viambajengo vya nyuma vya nimscript vyenye moduli ambazo hapo awali zilifanya kazi na mandharinyuma ya C (kwa mfano, moduli ya std/prelude). Upimaji wa moduli za stdlib zilizo na viambajengo vya C, JS na VM umeanzishwa.
  • Usaidizi ulioongezwa kwa chip ya Apple Silicon/M1, mifumo ya 32-bit RISC-V, armv8l na CROSSOS.
  • Moduli zilizoongezwa std/jsbigints, std/temfiles na std/sysrand. Maboresho makubwa yamefanywa kwa mfumo, hesabu, nasibu, json, jsonutils, os, tapureta, vifuniko, orodha na moduli za heshi.

Chanzo: opennet.ru

Kuongeza maoni