Izdanje programskog jezika Nim 1.6.0

Nakon godinu dana razvoja, objavljeno je izdanje sistemskog programskog jezika Nim 1.6, koji koristi statično tipkanje i kreiran je s pažnjom na Pascal, C++, Python i Lisp. Nim izvorni kod kompilira se u C, C++ ili JavaScript reprezentaciju. Nakon toga, rezultirajući C/C++ kod se kompajlira u izvršnu datoteku pomoću bilo kojeg dostupnog prevoditelja (clang, gcc, icc, Visual C++), što vam omogućuje postizanje performansi bliskih C-u, ako ne uzmete u obzir troškove rada sakupljač smeća. Slično Pythonu, Nim koristi uvlake kao graničnike blokova. Podržani su alati za metaprogramiranje i mogućnosti za stvaranje jezika specifičnih za domenu (DSL). Projektni kod je osiguran pod licencom MIT-a.

Značajne promjene u novom izdanju uključuju:

  • Dodana je klasa iterable[T] s implementacijom tipa za iteratore. predložak sum[T](a: iterable[T]): T = var rezultat: T za ai u a: rezultat += ai rezultat assert sum(iota(3)) == 0 + 1 + 2 # ili 'iota( 3).zbroj'
  • Dodana je eksperimentalna podrška za ".effectsOf" komentare za selektivnu primjenu efekata. kada je definirano(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Predložena je nova sintaksa uvoza "import foo {.all.}", koja vam omogućuje uvoz ne samo javnih, već i privatnih simbola. Za pristup privatnim poljima objekata dodan je modul std/importutils i privateAccess API. from system {.all.} as system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Dodana je eksperimentalna podrška za operatore točka, koji se mogu koristiti za implementaciju dinamičkih polja. uvoz std/json predloška '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] neka j = %*{“a1”: {“a2”: 10}} assert j.?a1.?a2.getInt == 10
  • Dodatni parametri mogu se navesti u argumentima bloka. predložak fn(a = 1, b = 2, tijelo1, tijelo2) = odbaci fn(a = 1): traka1 do: traka2
  • Implementirana je podrška za korisnički definirane literale (na primjer, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Kompajler implementira naredbu “—eval:cmd” za izravno pokretanje Nim naredbi iz naredbenog retka, na primjer ‘nim —eval:”echo 1″’.
  • Pružena podrška za stvaranje vlastitih proširenja za nimscript backend.
  • Poruke o pogrešci uvelike su proširene kako bi prikazale kontekst povezan s pogreškom. Implementirana prilagođena upozorenja prevoditelja.
  • Značajno poboljšana izvedba skupljača smeća "--gc:arc" i "--gc:orc".
  • Sva pozadina poboljšala je točnost i izvedbu koda za raščlanjivanje cijelih brojeva i brojeva s pomičnim zarezom.
  • Poboljšana kompatibilnost pozadina JS, VM i nimscript s modulima koji su prije radili samo s pozadinom C (na primjer, modul std/prelude). Uspostavljeno je testiranje stdlib modula s C, JS i VM pozadinom.
  • Dodana podrška za Apple Silicon/M1 čip, 32-bitni RISC-V, armv8l i CROSSOS sustave.
  • Dodani moduli std/jsbigints, std/tempfiles i std/sysrand. Značajna poboljšanja napravljena su na sustavu, math, random, json, jsonutils, os, typetraits, wrapnils, liste i hash module.

Izvor: opennet.ru

Dodajte komentar