PĂ€rast aasta pikkust arendust avaldati sĂŒsteemiprogrammeerimise keele Nim 1.6 versioon, mis kasutab staatilist tĂŒpiseerimist ning on loodud arvestades Pascalit, C++, Pythonit ja Lispi. Nim'i allikas kompileeritakse C, C++ vĂ”i JavaScript'i vormingusse. Edasi kompileeritakse saadud C/C++ kood tĂ€idesaatvasse faili, kasutades mis tahes saadaval olevat kompilaatorit (clang, gcc, icc, Visual C++), mis vĂ”imaldab saavutada C-le lĂ€hedase jĂ”udluse, kui mitte arvesse vĂ”tta prĂŒgikoristaja kĂ€itamisest tekkivaid kulusid. Nagu Pythonis, kasutatakse ka Nimis plokkide eraldajatena sissejuhatavaid sisendeid. Toetatakse metaprogrammeerimise vahendeid ja vĂ”imalusi domeenispetsiifiliste keelte (DSL) loomiseks. Projekti kood on litsentseeritud MIT litsentsi alusel.
Uues versioonis on silmapaistvaid muudatusi:
- Lisatud klass iterable[T] iteratorite tĂŒĂŒbiga. template sum[T](a: iterable[T]): T = var result: T for ai in a: result += ai result assert sum(iota(3)) == 0 + 1 + 2 # vĂ”i âiota(3).sumâ
- Lisatud katsetuslik tugi annotatsioonide jaoks «.effectsOf», et valikuliselt rakendada efekte. kui defined(nimHasEffectsOf): {.experimental: «strictEffects».} muu juhul: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp.}
- Pakutud on uus importimissĂŒntaks «import foo {.all.}», mis vĂ”imaldab importida mitte ainult avalikke, vaid ka privaatseid sĂŒmboleid. Privaatsetele objektide vĂ€ljadele juurdepÀÀsu tagamiseks on lisatud moodul std/importutils ja API privateAccess. from system {.all.} as system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
- Lisatud katsetuslik tugi punktiga algavatele operaatoritele, mida saab kasutada dĂŒnaamiliste vĂ€ljade rakendamiseks. import std/json template â.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{«a1»: {«a2»: 10}} assert j.?a1.?a2.getInt == 10
- Bloki argumentides on lubatud mÀÀrata tÀiendavaid parameetreid. template fn(a = 1, b = 2, body1, body2) = discard fn(a = 1): bar1 do: bar2
- Rakendatud on kasutaja mÀÀratud literaalide tugi (nĂ€iteks «-128âbignum'»). func `âbig`*(num: cstring): JsBigInt {.importjs: «BigInt(#)».} assert 0xffffffffffffffffâbig == (1âbig shl 64âbig) â 1âbig
- Kompilaatorisse on rakendatud kĂ€sk ââeval:cmdâ, et kĂ€ivitada kĂ€sklusi Nim keeles otse kĂ€surealt, nĂ€iteks 'nim âeval:"echo 1"'.
- Pakutakse tuge isiklike laienduste loomiseks nimscripti taustale.
- Viga sÔnumite sisu on oluliselt suurenenud, pakkudes seotud konteksti veateate kohta. Tehtud on kohandatavad kompilaatori hoiatused.
- PrĂŒgi kogumise meetodite ââgc:arcâ ja ââgc:orcâ toimimist on mĂ€rkimisvÀÀrselt parendatud.
- KĂ”ikide taustade puhul on parendatud tĂ€ielike ja ujukomaarvude analĂŒĂŒsi tĂ€psust ja jĂ”udlust.
- JS, VM ja nimscripti taustade ĂŒhilduvust on parendatud moodulitega, mis varem töötasid ainult C taustaga (nt std/prelude moodul). Testimine moodulite stdlib C, JS ja VM taustadega on tĂ”husalt korraldatud.
- Toetatakse Apple Silicon/M1 kiipi, 32-bitiseid RISC-V sĂŒsteeme, armv8l ja CROSSOS-i.
- Lisatud on moodulid std/jsbigints, std/tempfiles ja std/sysrand. MÀrkimisvÀÀrseid tÀiustusi on tehtud moodulites system, math, random, json, jsonutils, os, typetraits, wrapnils, lists ja hashes.
Allikas: opennet.ru
