Release av programmeringsspråket Nim 1.6.0

Efter ett års utveckling publicerades släppet av systemprogrammeringsspråket Nim 1.6, som använder statisk typning och skapades med ett öga på Pascal, C++, Python och Lisp. Nim källkod kompileras till en C-, C++- eller JavaScript-representation. Därefter kompileras den resulterande C/C++-koden till en körbar fil med valfri tillgänglig kompilator (clang, gcc, icc, Visual C++), vilket låter dig uppnå prestanda nära C, om du inte tar hänsyn till kostnaderna för att köra sopsamlaren. I likhet med Python använder Nim indrag som blockavgränsare. Metaprogrammeringsverktyg och funktioner för att skapa domänspecifika språk (DSL) stöds. Projektkoden tillhandahålls under MIT-licensen.

Noterbara förändringar i den nya utgåvan inkluderar:

  • Lade till klassen iterable[T] med en typimplementering för iteratorer. mall summa[T](a: iterabel[T]): T = var resultat: T för ai i a: resultat += ai resultat hävda summa(iota(3)) == 0 + 1 + 2 # eller 'iota( 3).summa'
  • Lade till experimentellt stöd för ".effectsOf"-kommentarer för att selektivt tillämpa effekter. när definierad(nimHasEffectsOf): {.experimentell: "strictEffects".} annat: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • En ny importsyntax "import foo {.all.}" har föreslagits, vilket gör att du kan importera inte bara offentliga utan även privata symboler. För att komma åt privata fält med objekt har std/importutils-modulen och privateAccess API lagts till. från system {.all.} som system2 import noll echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Lade till experimentellt stöd för punktoperatorer, som kan användas för att implementera dynamiska fält. importera std/json mall '.?'(a: JsonNode, b: otypad{ident}): JsonNode = a[astToStr(b)] låt j = %*{“a1”: {“a2”: 10}} hävda j.?a1.?a2.getInt == 10
  • Ytterligare parametrar kan anges i blockargument. mall fn(a = 1, b = 2, body1, body2) = kassera fn(a = 1): bar1 do: bar2
  • Stöd för användardefinierade bokstaver har implementerats (till exempel "-128'bignum"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} hävda 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Kompilatorn implementerar kommandot "—eval:cmd" för att direkt köra Nim-kommandon från kommandoraden, till exempel "nim -eval:"echo 1″'.
  • Tillhandahöll stöd för att skapa dina egna tillägg för nimscript-backend.
  • Felmeddelanden har utökats kraftigt för att visa sammanhanget som är associerat med felet. Implementerade anpassade kompilatorvarningar.
  • Avsevärt förbättrad prestanda för "--gc:arc" och "--gc:orc" sopsamlare.
  • Alla backends har förbättrat kodens noggrannhet och prestanda för att analysera heltal och flyttal.
  • Förbättrad kompatibilitet för JS-, VM- och nimscript-backends med moduler som tidigare bara fungerade med C-backend (till exempel std/prelude-modulen). Testning av stdlib-moduler med C, JS och VM backends har etablerats.
  • Tillagt stöd för Apple Silicon/M1-chip, 32-bitars RISC-V, armv8l och CROSSOS-system.
  • Lade till moduler std/jsbigints, std/tempfiles och std/sysrand. Betydande förbättringar har gjorts av modulerna för system, math, random, json, jsonutils, os, typdrag, wrapnils, listor och hash.

Källa: opennet.ru

Lägg en kommentar