Nim programozási nyelv 1.6.0 kiadás

Egy év fejlesztés után megjelent a Nim 1.6 rendszerprogramozási nyelv kiadása, amely statikus gépelést használ, és Pascal, C++, Python és Lisp szemmel készült. A Nim forráskódot C, C++ vagy JavaScript reprezentációba fordítják. Ezt követően a kapott C/C++ kódot bármely elérhető fordítóval (clang, gcc, icc, Visual C++) futtatható fájlba fordítjuk, ami lehetővé teszi a C-hez közeli teljesítmény elérését, ha nem számolunk a futtatás költségeivel. a szemétszállító. A Pythonhoz hasonlóan a Nim is behúzást használ blokkhatárolóként. A tartományspecifikus nyelvek (DSL) létrehozására szolgáló metaprogramozási eszközök és képességek támogatottak. A projekt kódja az MIT licenc alatt található.

Figyelemre méltó változások az új kiadásban:

  • Hozzáadtuk az iterable[T] osztályt az iterátorok típusmegvalósításával. sablon összege[T](a: iterálható[T]): T = változó eredmény: T for ai in a: eredmény += ai eredmény assert sum(iota(3)) == 0 + 1 + 2 # vagy 'iota( 3).összeg'
  • Kísérleti támogatás hozzáadva a „.effectsOf” megjegyzésekhez az effektusok szelektív alkalmazásához. amikor definiált(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Új „import foo {.all.}” importálási szintaxist javasoltak, amely lehetővé teszi nemcsak nyilvános, hanem privát szimbólumok importálását is. Az objektumok privát mezőinek eléréséhez hozzáadták az std/importutils modult és a privateAccess API-t. rendszerből {.all.} mint system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Kísérleti támogatás hozzáadva a pontoperátorokhoz, amelyek dinamikus mezők megvalósítására használhatók. std/json sablon importálása '.?'(a: JsonNode, b: típustalan{ident}): JsonNode = a[astToStr(b)] legyen j = %*{“a1”: {“a2”: 10}} assert j.?a1.?a2.getInt == 10
  • A blokk argumentumokban további paraméterek adhatók meg. sablon fn(a = 1, b = 2, body1, body2) = eldobja fn(a = 1): bar1 do: bar2
  • A felhasználó által definiált literálok támogatása megtörtént (például "-128'bignum'"). func `'big`*(szám: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • A fordító végrehajtja a "--eval:cmd" parancsot a Nim parancsok közvetlen futtatásához a parancssorból, például a 'nim -eval:"echo 1"'.
  • Támogatást nyújtott saját bővítmények létrehozásához a nimscript háttérprogramhoz.
  • A hibaüzenetek jelentősen kibővültek, hogy megmutassák a hibához kapcsolódó kontextust. Megvalósított egyéni fordítói figyelmeztetések.
  • Jelentősen javult a "--gc:arc" és a "--gc:orc" szemétgyűjtők teljesítménye.
  • Minden háttérprogram javította az egész számok és a lebegőpontos számok elemzéséhez szükséges kód pontosságát és teljesítményét.
  • A JS, a VM és a nimscript háttérprogramok továbbfejlesztett kompatibilitása olyan modulokkal, amelyek korábban csak a C háttérrel működtek (például az std/prelude modul). Létrejött az stdlib modulok tesztelése C, JS és VM háttérrendszerekkel.
  • Apple Silicon/M1 chip, 32 bites RISC-V, armv8l és CROSSOS rendszerek támogatása.
  • Hozzáadott modulok: std/jsbigints, std/tempfiles és std/sysrand. Jelentős fejlesztések történtek a rendszerben, a matematikai, véletlenszerű, json, jsonutils, operációs rendszer, típusjellemzők, wrapnils, listák és hash modulokban.

Forrás: opennet.ru

Hozzászólás