Lëshimi i gjuhës së programimit Nim 1.6.0

Pas pas një viti zhvillimi, është publikuar versioni 1.6 i gjuhës së programimit sistemik Nim, e cila përdor tipizimin statik dhe është krijuar me shikim ndaj Pascal, C++, Python dhe Lisp. Kodi burimor në gjuhën Nim kompilohet në një përfaqësim në C, C++ ose JavaScript. Më pas, kodi i marra C/C++ kompilohet në një skedar ekzekutiv me çdo kompilator të disponueshëm (clang, gcc, icc, Visual C++), çka lejon arritjen e performancës afër C, pa marrë parasysh shpenzimet për ekzekutimin e mbledhësit të plehrave. Ashtu si në Python, në Nim përdoren hapësirat për ndarjen e blloqeve. Mbështeten mjete metaprogramimi dhe mundësi për krijimin e gjuhëve të orientuara ndaj subjekteve (DSL). Kodi i projektit ofrohet nën licencën MIT.

Ndër ndryshimet e dukshme në versionin e ri:

  • Shtuar klasa iterable[T] me implementimin e tipit pĂ«r iteraotrat. template sum[T](a: iterable[T]): T = var rezultat: T pĂ«r ai nĂ« a: rezultat += ai rezultat assert sum(iota(3)) == 0 + 1 + 2 # ose ‘iota(3).sum’
  • Shtuar mbĂ«shtetje eksperimentale pĂ«r anotimet «.effectsOf» pĂ«r aplikimin selektiv tĂ« efekteve. when defined(nimHasEffectsOf): {.experimental: «strictEffects».} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp.}
  • Propozuar njĂ« sintaksĂ« tĂ« re importi «import foo {.all.}», e cila lejon importimin jo vetĂ«m tĂ« simboleve publike, por edhe atyre private. PĂ«r qasje nĂ« fushat private tĂ« objekteve janĂ« tĂ« shtuar moduli std/importutils dhe API privateAccess. from system {.all.} as system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Shtuar mbĂ«shtetje eksperimentale pĂ«r operatorĂ«t qĂ« fillojnĂ« me pikĂ«, tĂ« cilĂ«t mund tĂ« pĂ«rdoren pĂ«r implementimin e fushave dinamike. import std/json template ‘.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{«a1»: {«a2»: 10}} assert j.?a1.?a2.getInt == 10
  • NĂ« argumentet e bllokut Ă«shtĂ« lejuar specifikimi i parametrave tĂ« tjerĂ«. template fn(a = 1, b = 2, body1, body2) = discard fn(a = 1): bar1 bĂ«j: bar2
  • Implementuar mbĂ«shtetje pĂ«r literalet e definzuara nga pĂ«rdoruesi (p.sh. «-128’bignum'»). func `’big`*(num: cstring): JsBigInt {.importjs: «BigInt(#)».} assert 0xffffffffffffffff’big == (1’big shl 64’big) - 1’big
  • NĂ« kompilator Ă«shtĂ« implementuar komanda «—eval:cmd» pĂ«r ekzekutimin e drejtpĂ«rdrejtĂ« tĂ« komandave nĂ« gjuhĂ«n Nim nga komanda e linjĂ«s, pĂ«r shembull ‘nim —eval:»echo 1″‘.
  • Siguruar mbĂ«shtetje pĂ«r krijimin e zgjerimeve tĂ« veta pĂ«r backend-in nimscript.
  • Mesazhet e gabimeve janĂ« zgjeruar ndjeshĂ«m, duke siguruar njĂ« kontekst tĂ« lidhur me gabimin. Implementuar paralajmĂ«rime tĂ« personalizueshme tĂ« kompilatorit.
  • PĂ«rmirĂ«suar ndjeshĂ«m punĂ«n e mbledhĂ«sve tĂ« plehrave «—gc:arc» dhe «—gc:orc».
  • NĂ« tĂ« gjithĂ« backend-et Ă«shtĂ« pĂ«rmirĂ«suar saktĂ«sia dhe performanca e kodit pĂ«r analizimin e numrave tĂ« plotĂ« dhe atyre me pikĂ« lĂ«vizĂ«se.
  • PĂ«rmirĂ«suar kompatibilitetin e backend-eve JS, VM dhe nimscript me modulĂ«t, tĂ« cilĂ«t mĂ« parĂ« kishin funksionuar vetĂ«m me backend-in C (pĂ«r shembull, moduli std/prelude). Testimi i modulĂ«ve stdlib Ă«shtĂ« vendosur pĂ«r backend-et C, JS dhe VM.
  • Shtuar mbĂ«shtetje pĂ«r çipin Apple Silicon/M1, sistemet 32-bitale RISC-V, armv8l dhe CROSSOS.
  • Shtuar modulĂ«t std/jsbigints, std/tempfiles dhe std/sysrand. JanĂ« bĂ«rĂ« pĂ«rmirĂ«sime tĂ« rĂ«ndĂ«sishme nĂ« modulĂ«t system, math, random, json, jsonutils, os, typetraits, wrapnils, lists dhe hashes.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster