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