Nim programavimo kalbos leidimas 1.6.0

Po metų kūrimo buvo išleista sistemos programavimo kalba Nim 1.6, kuri naudoja statinį spausdinimą ir buvo sukurta atsižvelgiant į Pascal, C++, Python ir Lisp. Nim šaltinio kodas kompiliuojamas į C, C++ arba JavaScript vaizdavimą. Vėliau gautas C/C++ kodas sukompiliuojamas į vykdomąjį failą naudojant bet kurį turimą kompiliatorių (clang, gcc, icc, Visual C++), kuris leidžia pasiekti našumą, artimą C, jei neatsižvelgiate į paleidimo išlaidas. šiukšlių surinkėjas. Panašiai kaip Python, Nim naudoja įtrauką kaip blokų skyriklius. Palaikomi metaprogramavimo įrankiai ir galimybės kurti specifines domeno kalbas (DSL). Projekto kodas pateikiamas pagal MIT licenciją.

Svarbiausi naujojo leidimo pakeitimai:

  • Pridėta iterable [T] klasė su iteratorių tipo įgyvendinimu. šablono suma[T](a: kartojama[T]): T = kintamasis rezultatas: T ai in a: rezultatas += ai rezultatas tvirtinama suma(iota(3)) == 0 + 1 + 2 # arba 'iota( 3).suma'
  • Pridėtas eksperimentinis „.effectsOf“ komentarų palaikymas, kad būtų galima pasirinktinai taikyti efektus. kai apibrėžta(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Pasiūlyta nauja importavimo sintaksė „import foo {.all.}“, leidžianti importuoti ne tik viešuosius, bet ir privačius simbolius. Norint pasiekti privačius objektų laukus, buvo pridėtas std/importutils modulis ir privateAccess API. iš sistemos {.all.} kaip system2 importuoti nulį echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Pridėtas eksperimentinis taškų operatorių palaikymas, kuris gali būti naudojamas dinaminiams laukams įgyvendinti. importuoti std/json šabloną '.?'(a: JsonNode, b: neįvesta j.?a1.?a2.getInt == 10
  • Papildomi parametrai gali būti nurodyti bloko argumentuose. šablonas fn(a = 1, b = 2, body1, body2) = atmesti fn(a = 1): bar1 do: bar2
  • Įdiegtas vartotojo apibrėžtų literalų palaikymas (pvz., „-128'bignum'“). func `'big`*(skaičius: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Kompiliatorius įgyvendina komandą „—eval:cmd“, kad tiesiogiai paleistų Nim komandas iš komandinės eilutės, pavyzdžiui, „nim —eval:“echo 1“.
  • Teikė palaikymą kuriant savo plėtinius, skirtus nimscript backend.
  • Klaidų pranešimai buvo labai išplėsti, kad būtų rodomas su klaida susijęs kontekstas. Įdiegti pasirinktinio kompiliatoriaus įspėjimai.
  • Žymiai patobulintas „--gc:arc“ ir „--gc:orc“ šiukšlių rinktuvų veikimas.
  • Visos užpakalinės programos pagerino sveikųjų skaičių ir slankiojo kablelio skaičių analizės kodo tikslumą ir našumą.
  • Pagerintas JS, VM ir nimscript backend suderinamumas su moduliais, kurie anksčiau veikė tik su C backend (pvz., std/prelude moduliu). Sukurtas stdlib modulių su C, JS ir VM backend testavimas.
  • Pridėtas Apple Silicon/M1 lusto, 32 bitų RISC-V, armv8l ir CROSSOS sistemų palaikymas.
  • Pridėta modulių std/jsbigints, std/tempfiles ir std/sysrand. Buvo atlikti reikšmingi sistemos, matematikos, atsitiktinių, json, jsonutils, OS, tipo bruožų, įvyniojimų, sąrašų ir maišos modulių patobulinimai.

Šaltinis: opennet.ru

Добавить комментарий