Programmeerimise keele Nim 2.2.10 väljaanne

Esitatud on süsteemse programmeerimise keelest Nim 2.2.10. Nim on staatiliselt tüpiseeritud, kompileeritud programmeerimiskeel, mille süntaks on inspireeritud Pythonist ja mis pakub Lisp'i tasemel metaprogrammeerimisvõimalusi. Keel kompileeritakse C, C++ ja JavaScripti, tagades C-tasemel jõudluse, säilitades samas kõrgema taseme keeltele iseloomuliku väljendusvõime. Projekti kood on jaotatud MIT litsentsi alusel.

Nimi võimalused hõlmavad makrosüsteemi, mis töötab AST-lt kompileerimise ajal, üldprogrammeerimise toetust kontseptsioonide kaudu, mitme suunamise (multiple dispatch), määratletud mäluhalduse toetust mitmete strateegiate (ARC/ORC, refc, markeerimine ja koristamine) abil, sisseehitatud async/await toe asünkroonilisele programmeerimisele ja FFI, mis lihtsustab C/C++/JavaScript'iga integreerimist. Nim positsioneerib end süsteemikeelena, mis sobib alates sisseehitatud süsteemidest kuni veebirakenduste arendamiseks,serverite, rõhutades tõhusust, mälu ohutust ja arendamise mugavust.

Muutused keeles ja kompilaatoris:

  • Lisatud on eksperimentaalne lipp «—experimental:typeBoundOps», mis realiseerib RFC #380 ja suurendab «hash», «$», «==» liideste töö usaldusväärsust nimeliste tüüpide puhul kaudsete impordite korral. Näide: 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
  • Parandatud on viga, kus «sizeof(T)» šablonis «typedesc», mida kutsub esile dženereerika when-lause, põhjustas kompileerimisvea.

Peamised muutused, mis mõjutavad tagasipööratavat ühilduvust:

  • Vaikimisi on aktiivne lipukene „-d:nimPreviewFloatRoundtrip“. Funktsioonid „system.addFloat“ ja operaator „$“ kasutavad nüüd Dragonbox algoritmi, et genereerida ujuvate punktide numbrite minimaalne string esitus garantii korraliku ümardamise ja tagasipöördumise kohta. Vanema käitumise taastamiseks on saadaval lipukene „-d:nimLegacySprintf“.
  • Funktsiooni „tables.getOrDefault“ parameeter „default“ on ümber nimetatud „def“ konfliktide vältimiseks „system.default“-ga. Kood, mis kasutab nimetatud argumente „getOrDefault(…, default = …)“, nõuab värskendamist.
  • Lipukese „-d:nimPreviewCheckedClose“ sisselülitamisel genereerib funktsioon „close“ moodulis „std/syncio“ nüüd erandi sisend-/väljundvigade korral.
  • Tundmatud kompilatsioonihäired ja vihjed genereerivad nüüd hoiatus „warnUnknownNotes“ asemel vigu.
  • Lipukesega „-d:nimPreviewAsmSemSymbol“ on asm/emit operaatorites lisatud tüüpide kontroll tagasiütlevates tsitaatides.
  • Blokk „except:“ ilma tüübita põhjustab „Defect“ püüdmise korral paanika. Soovitav on kasutada „except Exception:“ või „except Defect:“ töötlemiseks. Migratsiooniks on ette nähtud lipukene „—legacy:noPanicOnExcept“.
  • Lipukes «-d:nimPreviewCStringComparisons» puhul on võrdlusoperatsioonid ({, >, {=, >=) «cstring» jaoks muutunud viidete semantikal põhinevast väärtuste semantikale, just nagu «==» ja «!=».
  • Moodul std/parsesql on viidud eraldi nimble-paketti; selle installimiseks on vajalik «nimble install parsesql» või atlas'e haldur.
  • Lipukes «-d:nimPreviewDuplicateModuleError» tõttu muutub kahe sama nimega mooduli import kompileerimisveaks. Nimekokkulangevuste lahendamiseks soovitatakse kasutada alias'e: «import foo as foo1».
  • Lisatud on valik «—mangle:nim|cpp», et valida nimede mungeldamise stiil, kui on lubatud silumisinfo (vaikimisi — cpp).
  • Funktsioonide succ, pred, inc, dec teine parameeter süsteemimoodulis aktsepteerib nüüd tüüpi «SomeInteger» asemel «Ordinal».
  • Bitist tõstukite (shl, shr, ashr) operaatorid rakendavad paremale operandile bitimaski C/C++/VM/JS tagapindadel.
  • Lisatud on hoiatus «—warning:ImplicitRangeConversion», mis tuvastab potentsiaalselt ohtlikud vaikimisi muutused väiksema suurusega vahemikele (nt int -> range[0..255]), mis võivad põhjustada käitusaja paanikat.

Uuendused loodud standardraamatukogus:

  • Moodulisse «setutils» on lisatud funktsioonid «symmetricDifference», operaator «-+-» ja inline-versioon «toggle», et tõhusalt arvutada bitikogude sümmeetrilist erinevust.
  • «strutils.multiReplace» funktsioon sai ülekloaded, et asendada sümbolid komplektist ühe läbimisega — kasulik stringide sanitiseerimiseks.
  • Moodulisse std/files on lisatud protseduurid, mis toetavad tüüpi Path: getFilePermissions, setFilePermissions, tryRemoveFile, copyFile (kohandatava puhvri ja linkide töötlemisega), copyFileWithPermissions, copyFileToDir. Eksportitud on tüübid CopyFlag ja FilePermission, et pakkuda täiendavat kontrolli failide operatsioonide üle.
  • Moodulisse std/dirs on lisatud uusi protseduure: copyDir ja copyDirWithPermissions, et rekursiivselt kopeerida katalooge, säilitades atribuute.
  • Backendides refc, JS ja VM on rakendatud funktsiooni «system.setLenUninit» tuge tüübi «string» jaoks, mis võimaldab muuta stringi pikkust ilma uue mälu initsialiseerimiseta, kui see laiendatakse.
  • std/parseopt-sse on lisatud toetus mitmele argumentide parsimise režiimile läbi loendi CliMode: Nim (vaikimisi), samuti katsetavad Lax ja Gnu.
  • std/math operaator «^» toetab nüüd reaal(arvude)t, kui eksponentsiaalset näitajat.
  • Min, max funktsioonid ja nende analoogid sequtils'ist openArray'ile võtavad nüüd kasutaja poolt defineeritud võrdlemise funktsiooni.
  • System.substr ellujäämine on optimeeritud: kui võimalik, kasutatakse copymem'i (C memcpy ümbritsev funktsioon).
  • Funktsioon system.newStringUninit on märgitud kõrvaltoimeteta, mistõttu saab seda kasutada lipu "—experimental:strictFuncs" all.

Tööriistad ja dokumentatsioon:

  • Dokumentatsiooni generaatorisse on lisatud lipp "—raw" markeeringu renderdamise keelamiseks JSON-väljundis.
  • Lipp "—stdinfile" on lisatud faili nime määramiseks koodi käivitamisel stdin'ist (vaikimisi stdinfile.nim).
  • Lipp "—styleCheck:warning" võimaldab käsitleda stiilipärimishäireid hoiatustena, mitte vigadena.
  • Juhendisse on lisatud dokumentatsioon pragma completeStruct kohta.

Rohkem kui 30 tõrke on parandatud, sealhulgas:

  • new'i tõrked ref object'iga ja koodigeneratsioon tuplide jaoks massiivides;
  • Probleemid static-parameetrite ja typedesc'i töötlemisel;
  • Tagasitõmbed ORC/refc mäluhalduse süsteemides, sealhulgas objektide joondamine ja üleliigsed nimZeroMem'i kutsed;
  • Parseopt, parsecfg ja JavaScripti tagumi koodigeneratsiooni vigade parsimine;
  • Mälu lekkimine ja kukkumine sulgude, iteratorite ja suurte objektide kasutamisel.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster