Ohjelmointikielen Nim 1.6.0 julkaisu

Vuoden kehitystyön jälkeen on julkaistu Nim 1.6, järjestelmäohjelmointikieli. Se käyttää staattista tyypitystä ja on rakennettu Pascal-, C++-, Python- ja Lisp-ohjelmointikieliä ajatellen. Nimin lähdekoodi käännetään C-, C++- tai JavaScript-kielille. Tuloksena oleva C/C++-koodi käännetään sitten suoritettavaksi tiedostoksi millä tahansa saatavilla olevalla kääntäjällä (clang, gcc, icc, Visual C++), jolloin saavutetaan lähes C:n tason suorituskyky ilman roskienkeruun kustannuksia. Kuten Python, Nim käyttää sisennystä lohkareiden erottimina. Metaohjelmointityökaluja ja ominaisuuksia toimialakohtaisten kielten (DSL) luomiseen tuetaan. Projektikoodi on lisensoitu MIT-lisenssillä.

Huomattavia muutoksia uudessa julkaisussa ovat mm.

  • Lisätty iterable[T]-luokka tyypin toteutuksella iteraattoreille. template sum[T](a: iterable[T]): T = var result: T for ai in a: result += ai result assert sum(iota(3)) == 0 + 1 + 2 # tai 'iota(3).sum'
  • Lisätty kokeellinen tuki ".effectsOf"-merkinnöille tehosteiden valikoivaa soveltamista varten. when defined(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp.}
  • Uusi tuontisyntaksi "import foo {.all.}" on otettu käyttöön, ja sen avulla voidaan tuoda paitsi julkisia myös yksityisiä symboleja. Yksityisten objektikenttien käyttöä varten on lisätty std/importutils-moduuli ja privateAccess-rajapinta. from system {.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. import std/json template '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{"a1": {"a2": 10}} assert j.?a1.?a2.getInt == 10
  • Lohkoargumenteissa sallitaan lisäparametreja. template fn(a = 1, b = 2, body1, body2) = discard fn(a = 1): bar1 do: bar2
  • Toteutettu tuki käyttäjän määrittämille literaaleille (esim. "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Kääntäjä toteuttaa komennon "--eval:cmd" Nim-komentojen suorittamiseksi suoraan komentoriviltä, ​​esimerkiksi 'nim --eval:"echo 1"'.
  • Nimscript-taustajärjestelmän mukautettujen laajennusten luomista on tuettu.
  • Virheilmoituksia on laajennettu merkittävästi sisältämään virheeseen liittyvän kontekstin. Konfiguroitavat kääntäjän varoitukset on otettu käyttöön.
  • Roskienkerääjien "--gc:arc" ja "--gc:orc" suorituskykyä on parannettu merkittävästi.
  • Kokonaisluku- ja liukulukujäsennyskoodin tarkkuutta ja suorituskykyä on parannettu kaikissa taustaohjelmissa.
  • Parannettu yhteensopivuutta JS-, VM- ja nimscript-taustajärjestelmien sekä aiemmin vain C-taustajärjestelmää tukeneiden moduulien (esim. std/prelude-moduuli) välillä. Stdlib-moduulien testausta C-, JS- ja VM-taustajärjestelmien kanssa on parannettu.
  • Lisätty tuki Apple Silicon/M1 -sirulle, 32-bittiselle RISC-V-, armv8l- ja CROSSOS-järjestelmille.
  • std/jsbigints-, std/tempfiles- ja std/sysrand-moduulit on lisätty. Merkittäviä parannuksia on tehty system-, math-, random-, json-, jsonutils-, os-, typetraits-, wrapnils-, lists- ja hashes-moduuleihin.

Lähde: opennet.ru

Osta luotettava isännöinti sivustoille, joissa on DDoS-suojaus, VPS VDS -palvelimet 🔥 Osta luotettavaa verkkosivustojen hostingia DDoS-suojauksella, VPS VDS -palvelimilla | ProHoster