Release van de programmeertaal Nim 1.6.0

Na een jaar van ontwikkeling werd de release van de systeemprogrammeertaal Nim 1.6 gepubliceerd, die gebruik maakt van statisch typen en is gemaakt met het oog op Pascal, C++, Python en Lisp. De Nim-broncode wordt gecompileerd in een C-, C++- of JavaScript-weergave. Vervolgens wordt de resulterende C/C++-code gecompileerd in een uitvoerbaar bestand met behulp van elke beschikbare compiler (clang, gcc, icc, Visual C++), waardoor u prestaties kunt behalen die dicht bij C liggen, als u geen rekening houdt met de kosten van het uitvoeren van de vuilophaler. Net als Python gebruikt Nim inspringen als blokscheidingstekens. Metaprogrammeertools en mogelijkheden voor het creëren van domeinspecifieke talen (DSL's) worden ondersteund. De projectcode wordt verstrekt onder de MIT-licentie.

Opmerkelijke veranderingen in de nieuwe release zijn onder meer:

  • De iterabele[T]-klasse toegevoegd met een type-implementatie voor iterators. sjabloon som[T](a: itereerbaar[T]): T = var resultaat: T voor ai in a: resultaat += ai resultaat assert sum(iota(3)) == 0 + 1 + 2 # of 'iota( 3).som'
  • Experimentele ondersteuning toegevoegd voor ".effectsOf"-annotaties voor het selectief toepassen van effecten. wanneer gedefinieerd(nimHasEffectsOf): {.experimenteel: "strictEffects".} else: {.pragma: effectenOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Er is een nieuwe importsyntaxis “import foo {.all.}” voorgesteld, waarmee u niet alleen openbare, maar ook privésymbolen kunt importeren. Om toegang te krijgen tot privévelden van objecten zijn de std/importutils-module en de privateAccess API toegevoegd. van systeem {.all.} als system2 import nul echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Experimentele ondersteuning toegevoegd voor puntoperatoren, die kunnen worden gebruikt om dynamische velden te implementeren. import std/json-sjabloon '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{“a1”: {“a2”: 10}} beweren j.?a1.?a2.getInt == 10
  • Aanvullende parameters kunnen worden opgegeven in blokargumenten. sjabloon fn(a = 1, b = 2, body1, body2) = weggooien fn(a = 1): bar1 do: bar2
  • Ondersteuning voor door de gebruiker gedefinieerde letterlijke waarden is geïmplementeerd (bijvoorbeeld "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • De compiler implementeert de opdracht “—eval:cmd” om Nim-opdrachten rechtstreeks vanaf de opdrachtregel uit te voeren, bijvoorbeeld 'nim —eval:"echo 1″".
  • Ondersteuning geboden voor het maken van uw eigen extensies voor de nimscript-backend.
  • Foutmeldingen zijn enorm uitgebreid om de context weer te geven die aan de fout is gekoppeld. Aangepaste compilerwaarschuwingen geïmplementeerd.
  • Aanzienlijk verbeterde prestaties van de "--gc:arc" en "--gc:orc" garbage collectors.
  • Alle backends hebben de nauwkeurigheid en prestaties van code voor het parseren van gehele getallen en drijvende-kommagetallen verbeterd.
  • Verbeterde compatibiliteit van JS-, VM- en nimscript-backends met modules die voorheen alleen werkten met de C-backend (bijvoorbeeld de std/prelude-module). Het testen van stdlib-modules met C-, JS- en VM-backends is opgezet.
  • Ondersteuning toegevoegd voor Apple Silicon/M1-chip, 32-bit RISC-V, armv8l en CROSSOS-systemen.
  • Modules std/jsbigints, std/tempfiles en std/sysrand toegevoegd. Er zijn aanzienlijke verbeteringen aangebracht aan de modules systeem, wiskunde, willekeurig, json, jsonutils, os, typetraits, wrapnils, lijsten en hashes.

Bron: opennet.ru

Voeg een reactie