Vydání programovacího jazyka Nim 1.6.0

Po roce vývoje bylo zveřejněno vydání systémového programovacího jazyka Nim 1.6, který používá statické typování a byl vytvořen s ohledem na Pascal, C++, Python a Lisp. Zdrojový kód Nim je zkompilován do reprezentace C, C++ nebo JavaScript. Následně je výsledný kód C/C++ zkompilován do spustitelného souboru pomocí libovolného dostupného kompilátoru (clang, gcc, icc, Visual C++), což umožňuje dosáhnout výkonu blízkého C, pokud nepočítáte náklady na provoz popelář. Podobně jako v Pythonu používá Nim jako oddělovače bloků odsazení. Jsou podporovány metaprogramovací nástroje a možnosti pro vytváření doménově specifických jazyků (DSL). Kód projektu je poskytován pod licencí MIT.

Mezi významné změny v nové verzi patří:

  • Přidána třída iterable[T] s implementací typu pro iterátory. template sum[T](a: iterable[T]): T = var result: T for ai in a: result += ai result claim sum(iota(3)) == 0 + 1 + 2 # or 'iota( 3).součet'
  • Přidána experimentální podpora pro anotace „.effectsOf“ pro selektivní aplikaci efektů. když je definován(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Byla navržena nová syntaxe importu „import foo {.all.}“, která umožňuje importovat nejen veřejné, ale i soukromé symboly. Pro přístup k privátním polím objektů byl přidán modul std/importutils a privateAccess API. ze systému {.all.} as system2 import nil echo system2.ThisIsSystem import os {.all.} echo wonderTarget
  • Přidána experimentální podpora pro tečkové operátory, které lze použít k implementaci dynamických polí. import std/json šablony '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{“a1”: {“a2”: 10}} tvrdit j.?a1.?a2.getInt == 10
  • Další parametry lze zadat v argumentech bloku. šablona fn(a = 1, b = 2, tělo1, tělo2) = zahodit fn(a = 1): bar1 do: bar2
  • Byla implementována podpora pro uživatelem definované literály (například "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} claim 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Kompilátor implementuje příkaz „—eval:cmd“ pro přímé spouštění příkazů Nim z příkazového řádku, například ‚nim —eval:“echo 1″‘.
  • Poskytovaná podpora pro vytváření vlastních rozšíření pro backend nimscript.
  • Chybové zprávy byly značně rozšířeny, aby zobrazovaly kontext spojený s chybou. Implementována varování vlastního kompilátoru.
  • Výrazně zlepšený výkon "--gc:arc" a "--gc:orc" garbage collector.
  • Všechny backendy zlepšily přesnost a výkon kódu pro analýzu celých čísel a čísel s pohyblivou řádovou čárkou.
  • Vylepšená kompatibilita backendů JS, VM a nimscript s moduly, které dříve fungovaly pouze s backendem C (například modul std/prelude). Bylo zavedeno testování modulů stdlib s backendy C, JS a VM.
  • Přidána podpora pro čip Apple Silicon/M1, 32bitové systémy RISC-V, armv8l a CROSSOS.
  • Přidány moduly std/jsbigints, std/tempfiles a std/sysrand. Významná vylepšení byla provedena v systému, matematických, náhodných, json, jsonutils, os, typetraits, wrapnils, seznamech a hašovacích modulech.

Zdroj: opennet.ru

Přidat komentář