Nim programmeerimiskeele versioon 1.6.0

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

Lisa kommentaar