Verëffentlechung vun der Nim 1.6.0 Programméiersprooch

No engem Joer Entwécklung gouf d'Verëffentlechung vun der Systemprogramméierungssprooch Nim 1.6 publizéiert, déi statesch Tippen benotzt a mat engem Aen op Pascal, C++, Python a Lisp erstallt gouf. Nim Quellcode ass an eng C, C ++ oder JavaScript Representatioun kompiléiert. Duerno gëtt de resultéierende C/C++ Code an eng ausführbar Datei zesummegesat mat all verfügbare Compiler (clang, gcc, icc, Visual C++), wat Iech erlaabt Leeschtung no bei C z'erreechen, wann Dir d'Käschte vum Laafen net berücksichtegt. den Dreckstipp. Ähnlech wéi Python benotzt Nim Indentatioun als Blockdelimiter. Metaprogramméierungsinstrumenter a Fäegkeeten fir Domain-spezifesch Sproochen (DSLs) ze kreéieren ginn ënnerstëtzt. De Projet Code gëtt ënner der MIT Lizenz geliwwert.

Notabele Ännerungen an der neier Verëffentlechung enthalen:

  • Der iterable [T] Klass mat engem Typ Implementatioun fir Iteratoren dobäigesat. Schablounsum[T](a: iterabel[T]): T = var Resultat: T fir ai an a: Resultat += ai Resultat behaapt sum(iota(3)) == 0 + 1 + 2 # oder 'iota( 3).sum'
  • Zousätzlech experimentell Ënnerstëtzung fir ".effectsOf" Annotatiounen fir selektiv Effekter anzesetzen. wann definéiert (nimHasEffectsOf): {.experimental: "strictEffects".} anescht: {.pragma: effectsOf.} proc mysort (s: seq; cmp: proc (a, b: T): int) {.effectsOf: cmp. }
  • Eng nei Import-Syntax "import foo {.all.}" gouf proposéiert, wat Iech erlaabt net nëmmen ëffentlech, awer och privat Symboler z'importéieren. Fir Zougang zu private Felder vun Objeten ze kréien, sinn de std/importutils Modul an d'privateAccess API bäigefüügt. aus System {.all.} als System2 import null echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Zousätzlech experimentell Ënnerstëtzung fir Punktoperateuren, déi benotzt kënne fir dynamesch Felder ëmzesetzen. import std/json Template '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] loosst j = %*{“a1”: {“a2”: 10}} behaapten j.?a1.?a2.getInt == 10
  • Zousätzlech Parameter kënnen a Blockargumenter spezifizéiert ginn. Schabloun fn(a = 1, b = 2, body1, body2) = ewechwerfen fn(a = 1): bar1 do: bar2
  • Ënnerstëtzung fir Benotzerdefinéiert Literatur gouf implementéiert (zum Beispill "-128'bignum"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • De Compiler implementéiert de Kommando "—eval: cmd" fir direkt Nim Kommandoen vun der Kommandozeil auszeféieren, zum Beispill 'nim -eval:"echo 1"'.
  • Gitt Ënnerstëtzung fir Är eegen Extensiounen fir den nimscript Backend ze kreéieren.
  • Fehlermeldungen si staark erweidert fir de Kontext ze weisen, dee mam Feeler assoziéiert ass. Ëmgesat personaliséiert Compiler Warnungen.
  • Däitlech verbessert Leeschtung vun den "--gc:arc" an "--gc:orc" Müllsammler.
  • All Backends hunn d'Genauegkeet an d'Leeschtung vum Code verbessert fir ganz Zuelen a Floating Point Zuelen ze analyséieren.
  • Verbesserte Kompatibilitéit vu JS, VM an nimscript Backends mat Moduler déi virdru just mam C Backend geschafft hunn (zum Beispill de std / Prelude Modul). Testen vun stdlib Moduler mat C, JS a VM Backends gouf etabléiert.
  • Zousätzlech Ënnerstëtzung fir Apple Silicon / M1 Chip, 32-Bit RISC-V, armv8l a CROSSOS Systemer.
  • Zousätzlech Moduler std/jsbigints, std/tempfiles an std/sysrand. Bedeitend Verbesserunge goufen am System gemaach, Mathematik, Zoufall, json, jsonutils, os, typetraits, wrapnils, Lëschten an hashes Moduler.

Source: opennet.ru

Setzt e Commentaire