Vrystelling van die Nim 1.6.0-programmeertaal

Na 'n jaar van ontwikkeling is die vrystelling van die stelselprogrammeertaal Nim 1.6 gepubliseer, wat statiese tik gebruik en geskep is met die oog op Pascal, C++, Python en Lisp. Nim-bronkode word saamgestel in 'n C-, C++- of JavaScript-voorstelling. Vervolgens word die resulterende C/C++-kode saamgestel in 'n uitvoerbare lêer deur gebruik te maak van enige beskikbare samesteller (clang, gcc, icc, Visual C++), wat jou in staat stel om prestasie naby aan C te bereik, as jy nie die bestuurskoste in ag neem nie die vullisverwyderaar. Soortgelyk aan Python, gebruik Nim inkeping as blokafgrensers. Metaprogrammeringsinstrumente en vermoëns vir die skep van domeinspesifieke tale (DSL's) word ondersteun. Die projekkode word onder die MIT-lisensie verskaf.

Opvallende veranderinge in die nuwe weergawe sluit in:

  • Bygevoeg die iterable [T] klas met 'n tipe implementering vir iterators. sjabloonsom[T](a: herhaalbaar[T]): T = var resultaat: T vir ai in a: resultaat += ai resultaat beweer som(iota(3)) == 0 + 1 + 2 # of 'iota( 3).som'
  • Bygevoeg eksperimentele ondersteuning vir ".effectsOf"-aantekeninge vir die selektiewe toepassing van effekte. wanneer gedefinieer(nimHasEffectsOf): {.eksperimenteel: "strictEffects".} anders: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • 'n Nuwe invoersintaksis "import foo {.all.}" is voorgestel, wat jou toelaat om nie net publieke, maar ook private simbole in te voer. Om toegang tot private velde van voorwerpe te verkry, is die std/importutils-module en die privateAccess API bygevoeg. vanaf stelsel {.all.} as stelsel2 voer nul eggo stelsel2 in. ThisIsSystem import os {.all.} eggo weirdTarget
  • Bygevoeg eksperimentele ondersteuning vir puntoperateurs, wat gebruik kan word om dinamiese velde te implementeer. invoer std/json-sjabloon '.?'(a: JsonNode, b: ongetik{ident}): JsonNode = a[astToStr(b)] laat j = %*{“a1”: {“a2”: 10}} beweer j.?a1.?a2.getInt == 10
  • Bykomende parameters kan in blokargumente gespesifiseer word. sjabloon fn(a = 1, b = 2, liggaam1, liggaam2) = weggooi fn(a = 1): maat1 doen: maat2
  • Ondersteuning vir gebruiker-gedefinieerde letters is geïmplementeer (byvoorbeeld, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} beweer 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Die samesteller implementeer die "--eval:cmd"-opdrag om Nim-opdragte direk vanaf die opdragreël uit te voer, byvoorbeeld 'nim -eval:"echo 1"'.
  • Ondersteuning verskaf vir die skep van u eie uitbreidings vir die nimscript-agterkant.
  • Foutboodskappe is grootliks uitgebrei om die konteks te wys wat met die fout geassosieer word. Gepasmaakte samestellerwaarskuwings geïmplementeer.
  • Aansienlik verbeterde werkverrigting van die "--gc:arc" en "--gc:orc" vullisverwyderaars.
  • Alle backends het die akkuraatheid en werkverrigting van kode verbeter vir die ontleding van heelgetalle en swaaipuntgetalle.
  • Verbeterde verenigbaarheid van JS, VM en nimscript backends met modules wat voorheen net met die C backend gewerk het (byvoorbeeld die std/prelude module). Toetsing van stdlib-modules met C, JS en VM backends is ingestel.
  • Bygevoeg ondersteuning vir Apple Silicon/M1-skyfie, 32-bis RISC-V, armv8l en CROSSOS-stelsels.
  • Bygevoeg modules std/jsbigints, std/tempfiles en std/sysrand. Beduidende verbeterings is aangebring aan die stelsel-, wiskunde-, ewekansige-, json-, jsonutils-, os-, tik-, wrapnils-, lyste- en hashe-modules.

Bron: opennet.ru

Voeg 'n opmerking