Ohjelmointikielen Nim 1.6.0 julkaisu

Vuoden kehitystyön jälkeen julkaistiin järjestelmäohjelmointikieli Nim 1.6, joka käyttää staattista kirjoitusta ja luotiin Pascalia, C++:aa, Pythonia ja Lispia silmällä pitäen. Nim-lähdekoodi on käännetty C-, C++- tai JavaScript-esitykseen. Myöhemmin tuloksena oleva C/C++-koodi käännetään suoritettavaksi tiedostoksi millä tahansa saatavilla olevalla kääntäjällä (clang, gcc, icc, Visual C++), jonka avulla voit saavuttaa suorituskyvyn lähellä C:tä, jos et ota huomioon ajon kustannuksia. roskakoriin. Pythonin tapaan Nim käyttää sisennystä lohkon erottimina. Metaohjelmointityökaluja ja ominaisuuksia verkkoaluekohtaisten kielten (DSL) luomiseen tuetaan. Projektikoodi toimitetaan MIT-lisenssillä.

Huomattavia muutoksia uudessa julkaisussa ovat mm.

  • Lisätty iterable[T]-luokka, jossa on iteraattorien tyyppitoteutus. mallin summa[T](a: iteroitava[T]): T = muuttuva tulos: T for ai in a: tulos += ai tulos vahvista summa(iota(3)) == 0 + 1 + 2 # tai 'iota( 3).summa'
  • Lisätty kokeellinen tuki ".effectsOf"-merkinnöille tehosteiden valikoivaa käyttöä varten. kun määritelty(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: EffectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Uutta tuontisyntaksia "import foo {.all.}" on ehdotettu, jonka avulla voit tuoda paitsi julkisia myös yksityisiä symboleja. Objektien yksityisiin kenttiin pääsemiseksi on lisätty std/importutils-moduuli ja privateAccess API. järjestelmästä {.all.} as system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Lisätty kokeellinen tuki pisteoperaattoreille, joita voidaan käyttää dynaamisten kenttien toteuttamiseen. tuo std/json-malli '.?'(a: JsonNode, b: kirjoittamaton{ident}): JsonNode = a[astToStr(b)] anna j = %*{"a1": {"a2": 10}} assert j.?a1.?a2.getInt == 10
  • Lohkoargumenteissa voidaan määrittää lisäparametreja. malli fn(a = 1, b = 2, body1, body2) = hylkää fn(a = 1): bar1 do: bar2
  • Tuki käyttäjän määrittämille literaaleille on otettu käyttöön (esimerkiksi "-128'bignum'"). func `'iso`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'iso shl 64'iso) - 1'iso
  • Kääntäjä toteuttaa komennon "—eval:cmd" suorittaakseen Nim-komentoja suoraan komentoriviltä, ​​esimerkiksi "nim —eval:"echo 1"'.
  • Tarjosi tukea omien laajennusten luomiseen nimscript-taustaohjelmaan.
  • Virheilmoituksia on laajennettu huomattavasti näyttämään virheeseen liittyvä konteksti. Toteutettu mukautetun kääntäjän varoitukset.
  • "--gc:arc" ja "--gc:orc" roskakeräinten suorituskyky on parantunut huomattavasti.
  • Kaikki taustaohjelmat ovat parantaneet koodin tarkkuutta ja suorituskykyä kokonaislukujen ja liukulukujen jäsentämiseen.
  • Parannettu JS-, VM- ja nimscript-taustaohjelmien yhteensopivuus moduulien kanssa, jotka aiemmin toimivat vain C-taustajärjestelmän kanssa (esimerkiksi std/prelude-moduuli). Stdlib-moduulien testaus C-, JS- ja VM-taustajärjestelmillä on perustettu.
  • Lisätty tuki Apple Silicon/M1-sirulle, 32-bittiselle RISC-V-, armv8l- ja CROSSOS-järjestelmille.
  • Lisätty moduulit std/jsbigints, std/tempfiles ja std/sysrand. Merkittäviä parannuksia on tehty järjestelmään, matematiikka-, satunnais-, json-, jsonutils-, OS-, kirjasinpiirteisiin, kääreisiin, luetteloihin ja hajautusmoduuleihin.

Lähde: opennet.ru

Lisää kommentti