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

ËshtĂ« publikuar versioni i gjuhĂ«s sĂ« programimit sistemor Nim 2.2.10. Nim Ă«shtĂ« njĂ« gjuhĂ« programimi e tipizuar statikisht e kompilueshme me njĂ« sintaksĂ« tĂ« frymĂ«zuar nga Python dhe mundĂ«si metaprogramimi nĂ« nivelin e Lisp. Gjuha kompilohet nĂ« C, C++ dhe JavaScript, duke ofruar performancĂ« nĂ« nivelin e C me shprehshmĂ«rinĂ« e gjuhĂ«ve mĂ« tĂ« larta. Kodi i projektit ofrohet nĂ«n licencĂ«n MIT.

Mundësitë e Nim përfshijnë një sistem makrosh që funksionon mbi AST gjatë kompilimit, mbështetje për programimin e përgjithshëm me koncepte, shpërndarje të shumëfishtë (multiple dispatch), menaxhim të determinueshëm të memories me mbështetje për disa strategji (ARC/ORC, refc, etiketim dhe pastrimin), mbështetje të integruar për async/await për programimin asinkron dhe FFI për integrim të thjeshtë me C/C++/JavaScript. Nim pozicionohet si një gjuhë sistemet, e përshtatshme për zhvillimin nga sisteme të integruara deri te uebi,serverëve, me theks në efikasitet, sigurinë e memories dhe lehtësinë e zhvillimit.

Ndryshimet në gjuhë dhe kompilator:

  • Shtuar flakĂ«n eksperimentale "—experimental:typeBoundOps", e cila realizon RFC #380 dhe rrit besueshmĂ«rinĂ« e funksionimit tĂ« interface-ve "hash", "$", "==" pĂ«r llojet e emĂ«ruar gjatĂ« importeve tĂ« drejtpĂ«rdrejta. Shembull: import std/hashes type Obj* = object x*, y*: int z*: string proc `==`*(a, b: Obj): bool = a.x == b.x and a.y == b.y proc hash*(a: Obj): Hash = $!(hash(a.x) &! hash(a.y)) # main.nim {.experimental: "typeBoundOps".} from objs import Obj import std/tables var t: Table[Obj, int] t[Obj(x: 3, y: 4, z: "debug")] = 34 echo t[Obj(x: 3, y: 4, z: "ignored")] # 34
  • Korrigjuar njĂ« gabim, ku "sizeof(T)" brenda njĂ« shablloni "typedesc", i thirrur nga njĂ« shprehje when tĂ« gjenerikut, shkaktonte njĂ« gabim kompilimi.

Ndryshimet kryesore që ndikojnë në mbështetje për të kaluarën:

  • NĂ« mĂ«nyrĂ« tĂ« parazgjedhur, Ă«shtĂ« aktivizuar FLAGS "-d:nimPreviewFloatRoundtrip". Funksionet "system.addFloat" dhe operatori "$" tani pĂ«rdorin algoritmin Dragonbox pĂ«r tĂ« gjeneruar pĂ«rfaqĂ«sime minimale tĂ« vargjeve tĂ« numrave me pikĂ« flotante me garanci tĂ« saktĂ« pĂ«r rrumbullakim dhe kthim tĂ« transformimit. PĂ«r t'u kthyer nĂ« sjelljen e vjetĂ«r, Ă«shtĂ« nĂ« dispozicion flagu "-d:nimLegacySprintf".
  • Parametri "default" nĂ« funksionin "tables.getOrDefault" Ă«shtĂ« rinovuar nĂ« "def" pĂ«r tĂ« shmangur konfliktet me "system.default". Kodi qĂ« pĂ«rdor argumente tĂ« emĂ«ruara "getOrDefault(
, default = 
)" kĂ«rkon pĂ«rditĂ«sim.
  • Kur Ă«shtĂ« aktivizuar flagu "-d:nimPreviewCheckedClose", funksioni "close" nĂ« modulit "std/syncio" tani gjeneron njĂ« pĂ«rjashtim nĂ« rast gabimesh tĂ« input-it/output-it.
  • ParalajmĂ«rimet dhe sugjerimet e panjohura tĂ« kompilatorit tani gjenerojnĂ« njĂ« paralajmĂ«rim "warnUnknownNotes" nĂ« vend tĂ« gabimeve.
  • Me flagun "-d:nimPreviewAsmSemSymbol", nĂ« operatorĂ«t asm/emit Ă«shtĂ« shtuar njĂ« kontroll i tipave pĂ«r simbolet nĂ« thonjĂ«za tĂ« prera.
  • Blloku "except:" pa pĂ«rcaktimin e tipit tani shkakton njĂ« panic nĂ« kapjen e "Defect". Rekomandohet qĂ« pĂ«r pĂ«rpunim tĂ« pĂ«rdoret "except Exception:" ose "except Defect:". PĂ«r migrim, Ă«shtĂ« parashikuar flagu "—legacy:noPanicOnExcept".
  • Me flagun «-d:nimPreviewCStringComparisons» operatorĂ«t e krahasimit ({, >, {=, >=) pĂ«r «cstring» janĂ« kaluara nga semantika e referencave nĂ« semantikĂ«n e vlerave, njĂ«soj si «==» dhe «!=».
  • Moduli std/parsesql Ă«shtĂ« nxjerrĂ« nĂ« njĂ« paketĂ« tĂ« veçantĂ« nimble; pĂ«r ta instaluar kĂ«rkohet «nimble install parsesql» ose pĂ«rdorimi i menaxherit atlas.
  • Me flagun «-d:nimPreviewDuplicateModuleError» importimi i dy moduleve me emra tĂ« njĂ«jtĂ« bĂ«het njĂ« gabim kompilimi. PĂ«r tĂ« zgjidhur kolizionet rekomandohet pĂ«rdorimi i aliasĂ«ve: «import foo si foo1».
  • Shtuar opsioni «—mangle:nim|cpp» pĂ«r tĂ« zgjedhur stilin e mangllimit tĂ« emrave kur informacioni pĂ«r debuggim Ă«shtĂ« i pĂ«rfshirĂ« (mĂ«nyra parazgjedhje Ă«shtĂ« cpp).
  • Parametri i dytĂ« i funksioneve succ, pred, inc, dec nĂ« modulĂ«n system tani pranon tipin «SomeInteger» nĂ« vend tĂ« «Ordinal».
  • OperatorĂ«t e zhvendosjes sĂ« bitĂ«ve (shl, shr, ashr) aplikojnĂ« maskĂ«n e bitĂ«ve nĂ« operandin e djathtĂ« nĂ« backend-et C/C++/VM/JS.
  • Shtuar paralajmĂ«rimin «—warning:ImplicitRangeConversion», i cili zbuloj konvertimet e rrezikshme tĂ« paqarta nĂ« intervale mĂ« tĂ« vogla (p.sh., int -> range[0..255]), tĂ« cilat mund tĂ« shkaktojnĂ« panik gjatĂ« ekzekutimit.

Risi në bibliotekën standarde:

  • Moduli «setutils» ka marrĂ« funksionet «symmetricDifference», operatorin «-+-» dhe versionin inline «toggle» pĂ«r tĂ« llogaritur nĂ« mĂ«nyrĂ« efektive diferencĂ«n simetrike tĂ« grupeve tĂ« bitĂ«ve.
  • NĂ« «strutils.multiReplace» Ă«shtĂ« shtuar mbingarkesa pĂ«r tĂ« zĂ«vendĂ«suar karakteret nga njĂ« grup nĂ« njĂ« kalim — e dobishme pĂ«r sanitizimin e vargjeve.
  • NĂ« modulin std/files janĂ« shtuar procedurat me mbĂ«shtetje pĂ«r tipin Path: getFilePermissions, setFilePermissions, tryRemoveFile, copyFile (me bufer tĂ« konfigurueshĂ«m dhe trajtim tĂ« lidhjeve), copyFileWithPermissions, copyFileToDir. JanĂ« eksportuar tipet CopyFlag dhe FilePermission pĂ«r kontrollin e hollĂ« tĂ« operacioneve me skedarĂ«.
  • Moduli std/dirs mori procedura tĂ« reja: copyDir dhe copyDirWithPermissions pĂ«r kopjimin rekurziv tĂ« direktorive duke ruajtur atributet.
  • NĂ« backend-et refc, JS dhe VM Ă«shtĂ« implementuar mbĂ«shtetje pĂ«r funksionin «system.setLenUninit» pĂ«r tipin «string», e cila lejon ndryshimin e gjatĂ« tĂ« vargut pa inicializimin e memories sĂ« re gjatĂ« zgjerimit.
  • NĂ« std/parseopt Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r disa metoda tĂ« analizĂ«s sĂ« argumenteve tĂ« linjĂ«s sĂ« komandĂ«s pĂ«rmes enumeratĂ«s CliMode: Nim (pĂ«r default), si dhe eksperimentale Lax dhe Gnu.
  • NĂ« std/math operatori «^» tani mbĂ«shtet numrat realĂ« si tregues tĂ« fuqisĂ«.
  • Funksionet min, max dhe analogĂ«t e tyre nga sequtils pĂ«r openArray tani pranojnĂ« njĂ« funksion krahasimi tĂ« pĂ«rdoruesit.
  • Implementimi i system.substr Ă«shtĂ« optimizuar: pĂ«rdoret copymem (njĂ« mbĂ«shtjellje mbi C memcpy) nĂ«se Ă«shtĂ« e pranishme.
  • Funksioni system.newStringUninit Ă«shtĂ« shĂ«nuar si pa efekte anĂ«sore, duke lejuar pĂ«rdorimin e tij me flag-un «—experimental:strictFuncs».

Instrumente dhe dokumentacion:

  • NĂ« gjeneratorin e dokumentacionit Ă«shtĂ« shtuar flag-u «—raw» pĂ«r tĂ« çaktivizuar shfaqjen e markup nĂ« dalje JSON.
  • Shtuar flag-u «—stdinfile» pĂ«r tĂ« caktuar emrin e skedarit kur ekzekutohet kodi nga stdin (nĂ« mĂ«nyrĂ« default — stdinfile.nim).
  • Flag-u «—styleCheck:warning» lejon trajtimin e shkeljeve tĂ« verifikimeve tĂ« stilit si paralajmĂ«rime, jo si gabime.
  • NĂ« manual Ă«shtĂ« shtuar dokumentacioni pĂ«r pragmĂ«n completeStruct.

Rregulluar më shumë se 30 gabime, përfshirë:

  • Gabimet nĂ« pĂ«rdorimin e new me ref object dhe gjenerimin e kodit pĂ«r tuple nĂ« array;
  • Problemet me pĂ«rpunimin e parametrave static dhe typedesc;
  • Regresionet nĂ« sistemet e menaxhimit tĂ« memories ORC/refc, duke pĂ«rfshirĂ« alignimin e objekteve dhe thirrjet e tepĂ«rta nimZeroMem;
  • Gabimet nĂ« analizimin nĂ« parseopt, parsecfg dhe gjenerimin e kodit pĂ«r backend-in JavaScript;
  • LĂ«vizjet dhe rĂ«niet gjatĂ« pĂ«rdorimit tĂ« closure-ve, iteratorĂ«ve dhe objekteve tĂ« mĂ«dha.

Burimi: opennet.ru

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster