Izdaja programskega jezika Nim 1.6.0

Po enem letu razvoja je bila objavljena izdaja sistemskega programskega jezika Nim 1.6, ki uporablja statično tipkanje in je bil ustvarjen s pogledom na Pascal, C++, Python in Lisp. Izvorna koda Nim je prevedena v predstavitev C, C++ ali JavaScript. Nato se nastala koda C/C++ prevede v izvedljivo datoteko s katerim koli razpoložljivim prevajalnikom (clang, gcc, icc, Visual C++), ki omogoča doseganje zmogljivosti blizu C, če ne upoštevate stroškov delovanja pobiralec smeti. Podobno kot Python tudi Nim uporablja zamike kot ločila blokov. Podprta so orodja za metaprogramiranje in zmožnosti za ustvarjanje domensko specifičnih jezikov (DSL). Koda projekta je na voljo pod licenco MIT.

Pomembne spremembe v novi izdaji vključujejo:

  • Dodan je razred iterable[T] z implementacijo tipa za iteratorje. predloga sum[T](a: iterable[T]): T = var rezultat: T za ai v a: rezultat += ai rezultat uveljavi sum(iota(3)) == 0 + 1 + 2 # ali 'iota( 3).vsota'
  • Dodana eksperimentalna podpora za opombe ".effectsOf" za selektivno uporabo učinkov. kadar je definirano(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Predlagana je bila nova sintaksa uvoza »import foo {.all.}«, ki vam omogoča uvoz ne samo javnih, ampak tudi zasebnih simbolov. Za dostop do zasebnih polj objektov sta bila dodana modul std/importutils in API privateAccess. from system {.all.} as system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Dodana eksperimentalna podpora za operatorje pik, ki jih je mogoče uporabiti za implementacijo dinamičnih polj. uvozi predlogo std/json '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{“a1”: {“a2”: 10}} assert j.?a1.?a2.getInt == 10
  • V argumentih bloka lahko podate dodatne parametre. predloga fn(a = 1, b = 2, telo1, telo2) = zavrzi fn(a = 1): vrstica1 do: vrstica2
  • Implementirana je podpora za uporabniško definirane literale (na primer "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Prevajalnik implementira ukaz »—eval:cmd« za neposredno izvajanje ukazov Nim iz ukazne vrstice, na primer »nim —eval:»echo 1″«.
  • Zagotovljena podpora za ustvarjanje lastnih razširitev za zaledje nimscript.
  • Sporočila o napakah so bila močno razširjena, da prikažejo kontekst, povezan z napako. Implementirana opozorila prevajalnika po meri.
  • Bistveno izboljšano delovanje zbiralnikov smeti "--gc:arc" in "--gc:orc".
  • Vsa ozadja so izboljšala natančnost in zmogljivost kode za razčlenjevanje celih števil in števil s plavajočo vejico.
  • Izboljšana združljivost ozadij JS, VM in nimscript z moduli, ki so prej delovali samo z ozadjem C (na primer modul std/prelude). Vzpostavljeno je bilo testiranje modulov stdlib z ozadji C, JS in VM.
  • Dodana podpora za čip Apple Silicon/M1, 32-bitni RISC-V, sisteme armv8l in CROSSOS.
  • Dodani moduli std/jsbigints, std/tempfiles in std/sysrand. Pomembne izboljšave so bile narejene na modulih system, math, random, json, jsonutils, os, typetraits, wrapnils, lists in hashes.

Vir: opennet.ru

Dodaj komentar