Utjefte fan de programmeertaal Nim 1.6.0

Nei in jier fan ûntwikkeling waard de frijlitting fan de systeemprogrammearringstaal Nim 1.6 publisearre, dy't statyske typen brûkt en makke is mei it each op Pascal, C++, Python en Lisp. Nim boarnekoade wurdt gearstald yn in C, C ++, of JavaSkript fertsjintwurdiging. Ferfolgens wurdt de resultearjende C/C++-koade kompilearre yn in útfierber bestân mei elke beskikbere kompilator (clang, gcc, icc, Visual C++), wêrtroch jo prestaasjes tichtby C kinne berikke, as jo de kosten fan it útfieren net yn rekken hâlde. de jiskefet. Similar to Python, Nim brûkt ynspringen as blok delimiters. Metaprogrammearring ark en mooglikheden foar it meitsjen fan domein-spesifike talen (DSL's) wurde stipe. De projektkoade wurdt levere ûnder de MIT-lisinsje.

Opmerklike feroarings yn 'e nije release omfetsje:

  • Tafoege de iterable [T] klasse mei in type ymplemintaasje foar iterators. template sum[T](a: iterabel[T]): T = var resultaat: T foar ai in: resultaat += ai resultaat assert sum(iota(3)) == 0 + 1 + 2 # of 'iota( 3).sum'
  • Eksperimintele stipe tafoege foar ".effectsOf" annotaasjes foar selektyf tapassen fan effekten. wannear definiearre (nimHasEffectsOf): {.eksperiminteel: "strictEffects".} oars: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • In nije ymportsyntaksis "ymport foo {.all.}" is foarsteld, wêrtroch jo net allinich publike, mar ek privee symboalen kinne ymportearje. Om tagong te krijen ta privee fjilden fan objekten binne de std/importutils-module en de privateAccess API tafoege. fan systeem {.all.} as system2 ymportearje nul echo system2. ThisIsSystem ymportearje os {.all.} echo weirdTarget
  • Eksperimintele stipe tafoege foar dot-operators, dy't kinne wurde brûkt om dynamyske fjilden út te fieren. ymportearje std/json-sjabloan '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] lit j = %*{“a1”: {“a2”: 10}} assert j.?a1.?a2.getInt == 10
  • Oanfoljende parameters kinne wurde oantsjutte yn blok arguminten. sjabloan fn(a = 1, b = 2, body1, body2) = wegerje fn(a = 1): bar1 do: bar2
  • Stipe foar brûker-definieare letteren is ymplementearre (bygelyks "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • De kompilator ymplementearret it kommando "—eval: cmd" om Nim-kommando's direkt út te fieren fan 'e kommandorigel, bygelyks 'nim -eval:"echo 1″'.
  • Stipe foar it meitsjen fan jo eigen útwreidingen foar it nimscript-backend.
  • Flaterberjochten binne sterk útwreide om de kontekst te sjen dy't ferbûn is mei de flater. Implementearre oanpaste kompilator warskôgings.
  • Oanmerklik ferbettere prestaasjes fan de "--gc: arc" en "--gc: orc" jiskefetsamlers.
  • Alle backends hawwe de krektens en prestaasjes fan koade ferbettere foar it parsearjen fan heule getallen en driuwende puntnûmers.
  • Ferbettere kompatibiliteit fan JS, VM en nimscript backends mei modules dy't earder allinnich wurke mei de C backend (bygelyks, de std / prelude module). Testen fan stdlib-modules mei C-, JS- en VM-backends is fêststeld.
  • Stipe tafoege foar Apple Silicon / M1-chip, 32-bit RISC-V, armv8l en CROSSOS-systemen.
  • Added modules std/jsbigints, std/tempfiles en std/sysrand. Wichtige ferbetterings binne makke oan it systeem, math, random, json, jsonutils, os, typetraits, wrapnils, listen en hashes modules.

Boarne: opennet.ru

Add a comment