Lëshimi i Go 1.22

Versioni i gjuhës së programimit Go 1.22 është publikuar, i cili zhvillohet nga kompania Google me ndihmën e komunitetit si një zgjidhje hibride, duke kombinuar performancën e lartë të gjuhëve të kompiluara me avantazhet e gjuhëve të skriptit, si lehtësia e kodimit, shpejtësia e zhvillimit dhe mbrojtja nga gabimet. Kodi i projektit shpërndahet nën licencën BSD.

Sintaksa e Go është e bazuar në elemente të njohura nga gjuha C me huazime të veçanta nga gjuha Oberon. Gjuha është mjaft e shkurtër, por kodi është lehtësisht i lexueshëm dhe i kuptueshëm. Kodi në gjuhën Go kompilohet në skedarë ekzekutivë binarë të veçante, që ekzekutohen në mënyrë natyrale, pa përdorimin e një makine virtuale (modulet e profilizimit, debugging dhe nën-sistemet e tjera për zbulimin e problemeve integrohen si komponentë runtime), që lejon arritjen e performancës, e cila është e krahasueshme me programet në gjuhën C.

Projekti është zhvilluar fillimisht me një fokus në programimin multithread dhe punimin efikas në sisteme me shumë bërthama, duke ofruar gjithashtu mjete të realizuara në nivelin e operatorëve për organizimin e llogaritjeve paralel dhe ndërlidhjen mes metodave që ekzekutohen paralelisht. Gjuha gjithashtu ofron mjete të integruara për mbrojtjen nga dalja jashtë zonave të lejuara të bllokimeve të memorjes dhe siguron mundësinë e përdorimit të mbledhësit të plehrave.

Ndryshimet në publikimin e ri përfshijnë:

  • NĂ« ciklet "for" Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r pĂ«rcaktimin e intervaleve tĂ« numrave tĂ« plota, pĂ«r shembull, pĂ«r tĂ« iteruar vlerat nga 0 nĂ« 9 tani mund tĂ« pĂ«rdorim ciklin "for i := range 10 {
}".
  • NĂ« ciklet "for" Ă«shtĂ« shtuar mbĂ«shtetje eksperimentale (GOEXPERIMENT=rangefunc) pĂ«r funksionet e pĂ«rcaktimit tĂ« gamĂ«s, duke lejuar pĂ«rcaktimin e njĂ« funksioni si itereator. PĂ«r shembull, "for i, x := range slices.Backward(s) {
}"
  • Çështja e vjetĂ«r me ciklet 'for', e cila shkaktonte ndarjen e variablave tĂ« ciklit nĂ« itera tĂ« ndryshme gjatĂ« thirrjes sĂ« korutinave (goroutine), Ă«shtĂ« zgjidhur. PĂ«r shembull, kodi values := []string{"a", "b", "c"} for _, v := range values { go func() { fmt.Println(v) done <- true }() } tani do tĂ« printojĂ« 'a', 'b' dhe 'c', dhe jo vetĂ«m 'c', siç ndodhte mĂ« parĂ«.
  • ËshtĂ« optimizuar funksionimi me memorjen nĂ« runtime, çka ka sjellĂ« njĂ« rritje prej 1-3% nĂ« performancĂ« dhe njĂ« ulje tĂ« konsumit tĂ« memorjes nĂ« shumicĂ«n e aplikacioneve me 1%.
  • PunĂ«t janĂ« vazhduar pĂ«r aktivizimin e optimizimeve nĂ« kompilator bazuar nĂ« rezultatet e profilizimit tĂ« kodit (PGO - Profile-guided optimization), qĂ« lejojnĂ« marrjen parasysh tĂ« karakteristikave qĂ« pĂ«rcaktohen gjatĂ« ekzekutimit tĂ« programit. NĂ« versionin e ri janĂ« aktivizuar mjete devirtualizimi tĂ« cilat zĂ«vendĂ«sojnĂ« thirrjet e drejtpĂ«rdrejta tĂ« metodave tĂ« ndryshme me ekzekutimin e bllokĂ«ve tĂ« zgjeruar inline.
  • Me aktivizimin e PGO, ndryshimi i shtuar ka lejuar rritjen e performancĂ«s sĂ« shumicĂ«s sĂ« programeve me 2-14%.
  • NĂ« kompilator Ă«shtĂ« shtuar njĂ« implementim eksperimental (GOEXPERIMENT=newinliner) i pĂ«rmirĂ«suar i mekanizmit tĂ« zhvillimit (inlining) tĂ« thirrjeve, i cili pĂ«rdor heuristika pĂ«r tĂ« ndarĂ« operacionet e rĂ«ndĂ«sishme nga ato dytĂ«sore.
  • NĂ« bibliotekĂ«n standarde Ă«shtĂ« shtuar paketa 'math/rand/v2', nĂ« tĂ« cilĂ«n ofrohet njĂ« API mĂ« gjithĂ«pĂ«rfshirĂ«s dhe janĂ« pĂ«rdorur algoritme mĂ« tĂ« shpejtĂ« pĂ«r gjenerimin e numrave pseudoreal.
  • NĂ« paketĂ«n net/http.ServeMux Ă«shtĂ« shtuar mundĂ«sia e specifikimit tĂ« metodave dhe maskave nĂ« trajtimet, pĂ«r shembull, trajtimi 'GET /static/{id}/' do tĂ« aplikohet nĂ« kĂ«rkesat me metodĂ«n HTTP 'GET' dhe do tĂ« ruajĂ« vlerĂ«n e segmentit tĂ« dytĂ« tĂ« rrugĂ«s sĂ« kĂ«rkuar nĂ« identifikuesin 'id'.
  • NĂ« paketĂ«n database/sql Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r tipin Null[T], i cili lejon skanimin e kolonave qĂ« mund tĂ« pranojnĂ« vlerĂ«n NULL. NĂ« paketĂ«n slices Ă«shtĂ« shtuar funksioni Concat pĂ«r kombinimin e disa slice-ve tĂ« çdo lloji.
  • NĂ« komandat pĂ«r punimin me hapĂ«sirat e punĂ«s (koleksionet e modulave) Ă«shtĂ« ofruar mundĂ«sia e pĂ«rdorimit tĂ« direktoriumit 'vendor', qĂ« pĂ«rmban varĂ«sitĂ« nga pĂ«rmbajtja e hapĂ«sirĂ«s sĂ« punĂ«s. Direktoriumi krijohet kur ekzekutohet komanda 'go work vendor' dhe pĂ«rdoret nĂ« komandat e ndĂ«rtimit me opsionin '-mod=vendor' (aktivizohet si standard kur ekziston direktoriumi vendor).

Ndryshime në sjelljen e utiliteteve.

  • go get nuk mbĂ«shtetet mĂ« jashtĂ« modulit nĂ« modin e vjetĂ«ruar GOPATH (dmth me GO111MODULE=off). Komandat e tjera tĂ« ndĂ«rtimit, si go build dhe go test, do tĂ« vazhdojnĂ« tĂ« funksionojnĂ« pĂ«r programet nĂ« modin e vjetĂ«ruar GOPATH pĂ«r njĂ« kohĂ« tĂ« pacaktuar.
  • go mod init nuk pĂ«rpiqet mĂ« tĂ« importojĂ« kĂ«rkesat pĂ«r modulet nga skedarĂ«t e konfigurimit pĂ«r mjete tĂ« tjera ofruesish (si Gopkg.lock).
  • go test -cover tani printon pĂ«rmbledhje tĂ« mbulimit pĂ«r paketat qĂ« mbulohen, tĂ« cilat nuk kanĂ« skedarĂ« tĂ« tyre tĂ« testit. Deri nĂ« Go 1.22, go test -cover pĂ«r njĂ« paketĂ« tĂ« tillĂ« do tĂ« raportonte? mymod/mypack [no test files]

    dhe tani me Go 1.22 funksionet në paketë konsiderohen të pambuluara: mymod/mypack coverage: 0.0% e deklaratave Vini re: nëse paketa në tërësi nuk përmban kod ekzekutiv, ne nuk mund të raportojmë një përqindje të rëndësishme mbulimi; për këto paketa go test do të vazhdojë të raportojë për mungesën e skedarëve të testeve.

  • NdĂ«rfaqja e uebit tĂ« mjetit trace Ă«shtĂ« pĂ«rditĂ«suar pak nĂ« kuadĂ«r tĂ« mbĂ«shtetjes pĂ«r gjurmuesin e ri, janĂ« zgjidhur disa probleme dhe Ă«shtĂ« pĂ«rmirĂ«suar lexueshmĂ«ria e faqeve tĂ« ndryshme. NdĂ«rfaqja e uebit tani mbĂ«shtet shqyrtimin e gjurmĂ«ve nĂ« njĂ« pamje tĂ« orientuar drejt rrjedhĂ«s. Shikuesi i gjurmĂ«s tani gjithashtu tregon kohĂ«n e plotĂ« tĂ« gjitha thirrjeve sistemike. KĂ«to pĂ«rmirĂ«sime janĂ« tĂ« aplikueshme vetĂ«m pĂ«r shikimin e gjurmĂ«ve tĂ« krijuara nga programet e ndĂ«rtuara nĂ« Go 1.22 ose mĂ« tĂ« re. NĂ« versionin e ardhshĂ«m, disa nga kĂ«to pĂ«rmirĂ«sime do tĂ« pĂ«rfshihen nĂ« gjurmĂ«t e krijuara nga versioni i vjetĂ«r i Go.
  • Mjedisi i ekzekutimit tani ruan metadatĂ«n e mbledhjes sĂ« mbeturinave nĂ« bazĂ« tĂ« tipeve mĂ« afĂ«r çdo objekti nĂ« kĂ«nd. Ky ndryshim gjithashtu ul kostot e memories sĂ« shumicĂ«s sĂ« programeve Go rreth 1% pĂ«rmes dedupikimit tĂ« metadata-ve tĂ« tepĂ«rta. NĂ« disa programe, pĂ«rmirĂ«simi mund tĂ« jetĂ« mĂ« i vogĂ«l, pasi ky ndryshim korrigjon kufijtĂ« e klasĂ«s sĂ« madhĂ«sisĂ« sĂ« shpĂ«rndarĂ«sit tĂ« memories, kĂ«shtu qĂ« disa objekte mund tĂ« zhvendosen nĂ« njĂ« klasĂ« madhĂ«sie mĂ« tĂ« lartĂ«. Si pasojĂ« e kĂ«tij ndryshimi, adresat e disa objekteve, tĂ« cilat mĂ« parĂ« janĂ« qenĂ« gjithmonĂ« tĂ« pĂ«rputhura me kufirin 16 byte (ose mĂ« lart), tani do tĂ« pĂ«rputhen vetĂ«m me kufirin 8 byte. Disa programe qĂ« pĂ«rdorin instrukcione assembler, tĂ« cilat kĂ«rkojnĂ« qĂ« adresat e memories tĂ« jenĂ« tĂ« pĂ«rputhura me njĂ« madhĂ«si mĂ« shumĂ« se 8 byte dhe mbĂ«shteten nĂ« sjelljen e mĂ«parshme tĂ« pĂ«rputhjes sĂ« shpĂ«rndarĂ«sit tĂ« memories, mund tĂ« dĂ«shtojnĂ«, por ne presim qĂ« ato programe tĂ« jenĂ« tĂ« rralla. TĂ« tilla programe mund tĂ« krijohen me GOEXPERIMENT=noallocheaders me mundĂ«sinĂ« pĂ«r tĂ« rikthyer modelin e mĂ«parshĂ«m tĂ« metadata-ve dhe rikthimin e sjelljes sĂ« mĂ«parshme tĂ« pĂ«rputhjes, por pronarĂ«t e paketave duhet tĂ« pĂ«rditĂ«sojnĂ« kodin e tyre assembler pĂ«r tĂ« shmangur supozimin pĂ«r pĂ«rputhjen, pasi ky anashkalim do tĂ« hiqet nĂ« versionin e ardhshĂ«m.
  • Siç u pĂ«rmend nĂ« shĂ«nimet e lĂ«shimit tĂ« Go 1.20, Go 1.22 tani kĂ«rkon versionin pĂ«rfundimtar tĂ« Go 1.20 ose mĂ« tĂ« ri pĂ«r ndĂ«rtimin fillestar. Ne presim qĂ« Go 1.24 do tĂ« kĂ«rkojĂ« versionin pĂ«rfundimtar tĂ« Go 1.22 ose njĂ« version mĂ« tĂ« ri pĂ«r ndĂ«rtimin fillestar.
    Origjinali (go.dev)

Burimi: linux.org.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