Nim programazio-lengoaia 1.6.0 bertsioa

Urtebeteko garapenaren ondoren, Nim 1.6 sistemaren programazio-lengoaia kaleratu zen, idazketa estatikoa erabiltzen duena eta Pascal, C++, Python eta Lisp begiz sortua. Nim iturburu-kodea C, C++ edo JavaScript irudikapen batean biltzen da. Ondoren, sortzen den C/C++ kodea fitxategi exekutagarri batean konpilatzen da erabilgarri dagoen edozein konpiladore erabiliz (clang, gcc, icc, Visual C++), eta horrek C-tik gertuko errendimendua lortzeko aukera ematen du, exekutatzeko kostuak kontuan hartzen ez badituzu. zabor biltzailea. Python-en antzera, Nim-ek koska erabiltzen du bloke-mugatzaile gisa. Domeinuko hizkuntza espezifikoak (DSL) sortzeko metaprogramazio tresnak eta gaitasunak onartzen dira. Proiektuaren kodea MIT lizentziapean ematen da.

Argitalpen berriaren aldaketa nabarmenak hauek dira:

  • Iterable[T] klasea gehitu da iteratzaileentzako inplementazio mota batekin. txantiloiaren batura[T](a: iterable[T]): T = var emaitza: T ai-rako a: emaitza += ai emaitza assert sum(iota(3)) == 0 + 1 + 2 # edo 'iota( 3).batuketa'
  • ".effectsOf" oharpenetarako laguntza esperimentala gehitu da efektuak selektiboki aplikatzeko. definituta dagoenean (nimHasEffectsOf): {.experimental: "strictEffects".} bestela: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • "import foo {.all.}" inportatzeko sintaxi berri bat proposatu da, ikur publikoak ez ezik pribatuak ere inportatzeko aukera emanez. Objektuen eremu pribatuetara sartzeko, std/importutils modulua eta privateAccess APIa gehitu dira. sistematik {.all.} system2 gisa inportatu nil echo system2.ThisIsSystem inportatu os {.all.} echo weirdTarget
  • Dot operadoreentzako euskarri esperimentala gehitu da, eremu dinamikoak ezartzeko erabil daitekeena. inportatu std/json txantiloia '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{β€œa1”: {β€œa2”: 10}} assert j.?a1.?a2.getInt == 10
  • Parametro gehigarriak zehaztu daitezke bloke-argumentuetan. txantiloia fn(a = 1, b = 2, gorputza1, gorputza2) = baztertu fn(a = 1): barra1 egin: barra2
  • Erabiltzaileak definitutako literaletarako euskarria ezarri da (adibidez, "-128'bignum'"). func `'big`*(zenbakia: cstring): JsBigInt {.importjs: "BigInt (#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Konpilatzaileak β€œβ€”eval:cmd” komandoa inplementatzen du Nim komandoak zuzenean exekutatzeko komando-lerrotik, adibidez, β€˜nim β€”eval:”echo 1β€³β€˜.
  • Nimscript backend-erako zure luzapenak sortzeko laguntza eman du.
  • Errore-mezuak asko zabaldu dira errorearekin lotutako testuingurua erakusteko. Konpiladore pertsonalizatuaren abisuak ezarri dira.
  • "--gc:arc" eta "--gc:orc" zabor-biltzaileen errendimendua nabarmen hobetu da.
  • Backend guztiek kodearen zehaztasuna eta errendimendua hobetu dituzte zenbaki osoak eta koma mugikorreko zenbakiak analizatzeko.
  • JS, VM eta nimscript backend-en bateragarritasuna hobetu da lehen C backendarekin soilik lan egiten zuten moduluekin (adibidez, std/prelude modulua). C, JS eta VM backendekin stdlib moduluen probak ezarri dira.
  • Apple Silicon/M1 txip, 32 biteko RISC-V, armv8l eta CROSSOS sistemetarako euskarria gehitu da.
  • Std/jsbigints, std/tempfiles eta std/sysrand moduluak gehitu dira. Hobekuntza nabarmenak egin dira sistema, math, random, json, jsonutils, os, typetraits, wrapnils, lists eta hash moduluetan.

Iturria: opennet.ru

Gehitu iruzkin berria