Dimittis de Nim 1.6.0 programmandi linguam

Post annum evolutionis emissio systematis programmandi lingua Nim 1.6 divulgata est, qua typing statice utitur et cum oculo in Pascal, C++, Pythone et Lisp creatum est. Nim fons codicis in C, C++, vel JavaScript repraesentationem compilavit. Postmodum, inde C/C++ codicem in documentum exsecutabile compilator (clang, gcc, icc, Visual C++) compilator exaravit, quae tibi permittit ut prope ad C perficiendum, nisi in currendi sumptibus consideres quisquiliarum collector. Similis Pythone, Nim incisis incisis ut stipites delimiters utitur. Metaprogramming instrumenta et facultates ad linguas speciales (DSLs) creandas sustinentur. Proiectum codicem sub licentia MIT praebetur.

Notae mutationes in nova emissione includuntur:

  • Classem iterabilem[T] addidit cum exsecutione typum pro iteratoribus. template sum[T](a: iterabile[T]): T = var eventum: T pro ai in a: eventum += ai proventum assero sum(iota(3)) == 0 + 1 + 2 # vel 'iota( 3).sum'
  • Adiectae sunt annotationes experimentales pro effectibus effectus selectivis applicandis. cum definitis (nimHasEffectsOf): {.experimentalibus: "strictefectis".} aliud: {.pragma:effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Nova syntaxis importatio proposita est "import foo {.all}", permittens te non solum publica, sed etiam privata symbola importare. Ut aditus agros privatorum rerum, moduli importutils et privati ​​accessus API adiecti sunt. as system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Addidit auxilium experimentum dotalibus operariis, quae ad campos dynamicos efficiendos adhiberi possunt. import std/json template '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] sit j = %*{"a1": {"a2": 10}} asserere j.?a1.?a2.getInt == 10
  • Additional parametri definiri possunt in argumentis scandalis. template fn(a = 1, b = 2, body1, body2) = disfacere fn(a = 1): bar1 do: bar2
  • Firmamentum pro usuario-litterarum definitarum ad effectum adductum est (exempli gratia "128'bignum""). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} dicunt 0x'big == (1'big shl 64'big) - 1'big
  • Compilator mandatum "-eval:cmd" directe currere iubet ex linea mandatorum Nim, exempli gratia 'nim β€”eval:' 1β€³β€˜.
  • Provisum subsidium ad extensiones tuas pro nimscript backend creandas.
  • Mandata erroris valde dilatata sunt ut contextui cum errore coniunctam ostenderem. Consuetudo compilatoris monita impleatur.
  • Insigniter emendavit effectus "--gc:arc" et "--gc:orc" purgamentorum publicanorum.
  • Omnes backends emendaverunt subtilitatem et observantiam codicis ad parsing numeros integros et punctum fluitantis numeri.
  • Improved compatibility of JS, VM ac nimscript backends with modules, qui antea solum cum C backend laboraverunt (exempli gratia moduli std/praeludii). Probatio stdlib modulorum cum C, JS, VM backends constituta est.
  • Auxilio addito pro chip Apple Silicon/M1, 32-bit rationum RISC-V, armv8l et CROSSOS.
  • Adduntur moduli std/jsbigints, std/tempfiles et std/sysrand. Emendationes significantes factae sunt rationi, math, temere, json, jsonutils, os, typetraits, involucris, schedae et hashes modulorum.

Source: opennet.ru