Nim programmeringsspråk utgivelse 1.6.0

Etter et år med utvikling ble utgivelsen av systemprogrammeringsspråket Nim 1.6 publisert, som bruker statisk skriving og ble opprettet med øye på Pascal, C++, Python og Lisp. Nim-kildekoden er kompilert til en C-, C++- eller JavaScript-representasjon. Deretter blir den resulterende C/C++-koden kompilert til en kjørbar fil ved å bruke en hvilken som helst tilgjengelig kompilator (clang, gcc, icc, Visual C++), som lar deg oppnå ytelse nær C, hvis du ikke tar hensyn til kostnadene ved å kjøre søppelsamleren. I likhet med Python bruker Nim innrykk som blokkavgrensere. Metaprogrammeringsverktøy og muligheter for å lage domenespesifikke språk (DSL) støttes. Prosjektkoden er gitt under MIT-lisensen.

Viktige endringer i den nye utgivelsen inkluderer:

  • Lagt til iterable[T]-klassen med en typeimplementering for iteratorer. mal sum[T](a: iterable[T]): T = var resultat: T for ai i a: resultat += ai resultat assert sum(iota(3)) == 0 + 1 + 2 # eller 'iota( 3).sum'
  • Lagt til eksperimentell støtte for ".effectsOf"-kommentarer for selektiv bruk av effekter. når definert(nimHasEffectsOf): {.eksperimentell: "strictEffects".} annet: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • En ny importsyntaks "import foo {.all.}" har blitt foreslått, som lar deg importere ikke bare offentlige, men også private symboler. For å få tilgang til private felt med objekter er std/importutils-modulen og privateAccess API lagt til. fra system {.all.} som system2 import null echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Lagt til eksperimentell støtte for punktoperatorer, som kan brukes til å implementere dynamiske felt. importer std/json-mal '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] la j = %*{“a1”: {“a2”: 10}} hevde j.?a1.?a2.getInt == 10
  • Ytterligere parametere kan spesifiseres i blokkargumenter. mal fn(a = 1, b = 2, body1, body2) = forkast fn(a = 1): takt1 do: takt2
  • Støtte for brukerdefinerte bokstaver er implementert (for eksempel "-128'bignum"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} hevde 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Kompilatoren implementerer "--eval:cmd"-kommandoen for å kjøre Nim-kommandoer direkte fra kommandolinjen, for eksempel 'nim -eval:"echo 1"'.
  • Gir støtte for å lage dine egne utvidelser for nimscript-backend.
  • Feilmeldinger har blitt kraftig utvidet for å vise konteksten knyttet til feilen. Implementerte tilpassede kompilatoradvarsler.
  • Betydelig forbedret ytelse til "--gc:arc" og "--gc:orc" søppelsamlere.
  • Alle backends har forbedret nøyaktigheten og ytelsen til kode for å analysere heltall og flyttall.
  • Forbedret kompatibilitet av JS-, VM- og nimscript-backends med moduler som tidligere bare fungerte med C-backend (for eksempel std/prelude-modulen). Testing av stdlib-moduler med C, JS og VM backends er etablert.
  • Lagt til støtte for Apple Silicon/M1-brikke, 32-biters RISC-V, armv8l og CROSSOS-systemer.
  • Lagt til moduler std/jsbigints, std/tempfiles og std/sysrand. Betydelige forbedringer har blitt gjort i system, matematikk, random, json, jsonutils, os, typetraits, wrapnils, lister og hashes-moduler.

Kilde: opennet.ru

Legg til en kommentar