Vydanie programovacieho jazyka Nim 1.6.0

Po roku vývoja bolo zverejnené vydanie systémového programovacieho jazyka Nim 1.6, ktorý využíva statické písanie a bol vytvorený s ohľadom na Pascal, C++, Python a Lisp. Zdrojový kód Nim je skompilovaný do reprezentácie C, C++ alebo JavaScript. Následne je výsledný kód C/C++ skompilovaný do spustiteľného súboru pomocou akéhokoľvek dostupného kompilátora (clang, gcc, icc, Visual C++), čo umožňuje dosiahnuť výkon blízky C, ak neberiete do úvahy náklady na prevádzku smetiar. Podobne ako v Pythone, Nim používa odsadenie ako oddeľovače blokov. Podporované sú metaprogramovacie nástroje a možnosti na vytváranie doménovo špecifických jazykov (DSL). Kód projektu je poskytovaný pod licenciou MIT.

Medzi významné zmeny v novom vydaní patria:

  • Pridaná trieda iterable[T] s implementáciou typu pre iterátory. template sum[T](a: iterable[T]): T = var result: T for ai in a: result += ai result require sum(iota(3)) == 0 + 1 + 2 # or 'iota( 3).súčet'
  • Pridaná experimentálna podpora pre anotácie „.effectsOf“ na selektívne použitie efektov. keď je definované(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Bola navrhnutá nová syntax importu „import foo {.all.}“, ktorá umožňuje importovať nielen verejné, ale aj súkromné ​​symboly. Na prístup k súkromným poliam objektov bol pridaný modul std/importutils a privateAccess API. zo systému {.all.} as system2 import nil echo system2.ThisIsSystem import os {.all.} echo wonderTarget
  • Pridaná experimentálna podpora pre bodové operátory, ktoré možno použiť na implementáciu dynamických polí. importovať šablónu std/json '.?'(a: JsonNode, b: nezadané{ident}): JsonNode = a[astToStr(b)] nech j = %*{“a1”: {“a2”: 10}} tvrdiť j.?a1.?a2.getInt == 10
  • V argumentoch bloku je možné zadať ďalšie parametre. šablóna fn(a = 1, b = 2, telo1, telo2) = zahodiť fn(a = 1): bar1 do: bar2
  • Bola implementovaná podpora pre používateľom definované literály (napríklad "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} claim 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Kompilátor implementuje príkaz "--eval:cmd" na priame spustenie príkazov Nim z príkazového riadku, napríklad 'nim -eval:"echo 1"'.
  • Poskytnutá podpora pre vytváranie vlastných rozšírení pre backend nimscript.
  • Chybové hlásenia boli značne rozšírené, aby zobrazovali kontext súvisiaci s chybou. Implementované upozornenia vlastného kompilátora.
  • Výrazne vylepšený výkon zberačov odpadu "--gc:arc" a "--gc:orc".
  • Všetky backendy zlepšili presnosť a výkon kódu na analýzu celých čísel a čísel s pohyblivou rádovou čiarkou.
  • Vylepšená kompatibilita backendov JS, VM a nimscript s modulmi, ktoré predtým fungovali iba s backendom C (napríklad modul std/prelude). Bolo zavedené testovanie modulov stdlib s C, JS a VM backendmi.
  • Pridaná podpora pre čip Apple Silicon/M1, 32-bitové systémy RISC-V, armv8l a CROSSOS.
  • Pridané moduly std/jsbigints, std/tempfiles a std/sysrand. Významné vylepšenia boli vykonané v systéme, matematických, náhodných, json, jsonutils, os, typetraits, wrapnils, zoznamoch a hašovacích moduloch.

Zdroj: opennet.ru

Pridať komentár