Nim programmeringssprog udgivelse 1.6.0

Efter et års udvikling blev udgivelsen af ​​systemprogrammeringssproget Nim 1.6 udgivet, som bruger statisk skrivning og blev skabt med øje for Pascal, C++, Python og Lisp. Nim-kildekoden er kompileret til en C-, C++- eller JavaScript-repræsentation. Efterfølgende kompileres den resulterende C/C++-kode til en eksekverbar fil ved hjælp af enhver tilgængelig compiler (clang, gcc, icc, Visual C++), som giver dig mulighed for at opnå ydeevne tæt på C, hvis du ikke tager højde for omkostningerne ved at køre skraldemanden. I lighed med Python bruger Nim indrykning som blokadskillere. Metaprogrammeringsværktøjer og -funktioner til at skabe domænespecifikke sprog (DSL'er) understøttes. Projektkoden leveres under MIT-licensen.

Bemærkelsesværdige ændringer i den nye udgivelse inkluderer:

  • Tilføjet iterable[T]-klassen med en typeimplementering for iteratorer. skabelonsum[T](a: iterabel[T]): T = var resultat: T for ai i a: resultat += ai resultat assert sum(iota(3)) == 0 + 1 + 2 # eller 'iota( 3).sum'
  • Tilføjet eksperimentel støtte til ".effectsOf"-annoteringer til selektiv anvendelse af effekter. når defineret(nimHasEffectsOf): {.eksperimentel: "strictEffects".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • En ny importsyntaks "import foo {.all.}" er blevet foreslået, som giver dig mulighed for at importere ikke kun offentlige, men også private symboler. For at få adgang til private felter af objekter er std/importutils-modulet og privateAccess API blevet tilføjet. fra system {.all.} som system2 import nul echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Tilføjet eksperimentel støtte til punktoperatorer, som kan bruges til at implementere dynamiske felter. import std/json skabelon '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] lad j = %*{“a1”: {“a2”: 10}} hævde j.?a1.?a2.getInt == 10
  • Yderligere parametre kan angives i blokargumenter. skabelon fn(a = 1, b = 2, brødtekst1, brødtekst2) = kasser fn(a = 1): søjle1 gør: søjle2
  • Understøttelse af brugerdefinerede bogstaver er blevet implementeret (for eksempel "-128'bignum"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} hævde 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Compileren implementerer kommandoen "--eval:cmd" til direkte at køre Nim-kommandoer fra kommandolinjen, for eksempel 'nim -eval:"echo 1"'.
  • Givet support til at oprette dine egne udvidelser til nimscript-backend.
  • Fejlmeddelelser er blevet meget udvidet for at vise konteksten forbundet med fejlen. Implementeret brugerdefinerede compiler advarsler.
  • Markant forbedret ydeevne af "--gc:arc" og "--gc:orc" affaldssamlere.
  • Alle backends har forbedret nøjagtigheden og ydeevnen af ​​kode til parsing af heltal og flydende kommatal.
  • Forbedret kompatibilitet af JS-, VM- og nimscript-backends med moduler, der tidligere kun fungerede med C-backend (f.eks. std/prelude-modulet). Test af stdlib moduler med C, JS og VM backends er etableret.
  • Tilføjet understøttelse af Apple Silicon/M1-chip, 32-bit RISC-V, armv8l og CROSSOS-systemer.
  • Tilføjede moduler std/jsbigints, std/tempfiles og std/sysrand. Der er foretaget væsentlige forbedringer af system-, matematik-, random-, json-, jsonutils-, os-, typetraits-, wrapnils-, lister- og hashe-modulerne.

Kilde: opennet.ru

Tilføj en kommentar