Aastase arendustöö järel avaldati süsteemi programmeerimiskeele Nim 1.6 väljalase, mis kasutab staatilist tippimist ja mille loomisel on silmas peetud Pascalit, C++, Pythonit ja Lisp. Nim lähtekood kompileeritakse C-, C++- või JavaScripti esituseks. Seejärel kompileeritakse saadud C/C++ kood täitmisfailiks, kasutades mis tahes saadaolevat kompilaatorit (clang, gcc, icc, Visual C++), mis võimaldab teil saavutada C-le lähedase jõudluse, kui te ei võta arvesse käitamise kulusid. prügivedaja. Sarnaselt Pythoniga kasutab Nim plokkide eraldajana taande. Toetatakse metaprogrammeerimistööriistu ja -võimalusi domeenispetsiifiliste keelte (DSL) loomiseks. Projekti kood antakse MIT-i litsentsi alusel.
Märkimisväärsed muudatused uues versioonis on järgmised:
- Lisati itereeritav[T] klass koos iteraatorite tüübirakendusega. malli summa[T](a: iterable[T]): T = muutuja tulemus: T ai jaoks in a: tulemus += ai tulemus kinnitab summa(iota(3)) == 0 + 1 + 2 # või 'iota( 3).summa'
- Lisatud eksperimentaalne tugi ".effectsOf" märkustele efektide valikuliseks rakendamiseks. kui defineeritud(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: EffectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
- Välja on pakutud uus impordi süntaks "import foo {.all.}", mis võimaldab importida mitte ainult avalikke, vaid ka privaatseid sümboleid. Objektide privaatsele väljale juurdepääsuks on lisatud moodul std/importutils ja privateAccess API. süsteemist {.all.} as system2 import null echo system2.ThisIsSystem import os {.all.} echo weirdTarget
- Lisatud eksperimentaalne tugi punktioperaatoritele, mida saab kasutada dünaamiliste väljade rakendamiseks. importida std/json malli '.?'(a: JsonNode, b: tüpimata{ident}): JsonNode = a[astToStr(b)] olgu j = %*{“a1”: {“a2”: 10}} kinnitab j.?a1.?a2.getInt == 10
- Täiendavaid parameetreid saab määrata ploki argumentides. mall fn(a = 1, b = 2, body1, body2) = loobuma fn(a = 1): bar1 do: bar2
- Rakendatud on kasutaja määratud literaalide tugi (näiteks "-128'bignum"). func `'big`*(arv: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
- Kompilaator rakendab käsku "--eval:cmd", et käivitada otse käsurealt Nim-käske, näiteks 'nim -eval:"echo 1"'.
- Pakkus tuge nimscripti taustaprogrammi jaoks oma laiendite loomiseks.
- Veateateid on oluliselt laiendatud, et näidata veaga seotud konteksti. Rakendatud kohandatud kompilaatori hoiatused.
- Prügikogujate "--gc:arc" ja "--gc:orc" jõudlus on oluliselt paranenud.
- Kõik taustaprogrammid on täiustanud täisarvude ja ujukomaarvude sõelumise koodi täpsust ja jõudlust.
- JS-i, VM-i ja nimscripti taustaprogrammide täiustatud ühilduvus moodulitega, mis varem töötasid ainult C-taustaprogrammiga (nt moodul std/prelude). Loodud on stdlib moodulite testimine C, JS ja VM taustaprogrammidega.
- Lisatud on Apple Silicon/M1 kiibi, 32-bitise RISC-V, armv8l ja CROSSOS süsteemide tugi.
- Lisatud moodulid std/jsbigints, std/tempfiles ja std/sysrand. Süsteemi, matemaatika-, juhusliku-, json-, jsonutils-, OS-i, kirjatüüpide, wrapnilide, loendite ja räsimoodulite osas on tehtud olulisi täiustusi.
Allikas: opennet.ru