Lëshimi i Go 1.22

Ekipi i Google ka lançuar versionin 1.22 të gjuhës programuese Go, e cila po zhvillohet si një zgjidhje hibride që kombinon performancën e lartë të gjuhëve të kompilueshme me avantazhet e gjuhëve skriptimi, si lehtësia në kodim, 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 disa huazime nga gjuha Oberon. Gjuha është mjaft e shkurtër, por kodi lexohet dhe perceptohet lehtësisht. Kodi në gjuhën Go kompiloihet në skedarë të veçantë ekzekutivë, të cilët ekzekutohen natyrisht, pa përdorur makineri virtuale (modulet e profilimit, debugging dhe nën-sistemet e tjera për zbulimin e problemeve integrohen si komponentë runtime), duke lejuar arritjen e performancës së ngjashme me programet në gjuhën C.

Projekti është zhvilluar fillimisht me mendimin për programimin me shumë thirrje dhe funksionimin efikas në sisteme me shumë bërthama, përfshirë ofrimin e mjeteve të realizuara në nivel operatorësh për organizimin e llogaritjeve paralel dhe bashkëpunimin midis metodave që ekzekutohen paralelisht. Gjuha gjithashtu ofron mjete të integruara për mbrojtjen nga dalja në zonat e lejuara të blloqeve të memories të ndara dhe siguron mundësinë e përdorimit të mbledhësit të plehrave.

Mes ndryshimeve në versionin e ri:

  • NĂ« ciklet "for" Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r pĂ«rcaktimin e intervaleve nga numrat e plotĂ«, pĂ«r shembull, pĂ«r tĂ« iteruar vlerat nga 0 nĂ« 9 tani mund tĂ« pĂ«rdoret cikli "for i := range 10 {...}".
  • NĂ« ciklet "for" Ă«shtĂ« shtuar njĂ« mbĂ«shtetje eksperimentale (GOEXPERIMENT=rangefunc) pĂ«r funksionet e pĂ«rcaktimit tĂ« intervaleve, duke lejuar caktimin e njĂ« funksioni si iterues. PĂ«r shembull, "for i, x := range slices.Backward(s) {...}"
  • Problemi i gjatĂ« me ciklet "for" qĂ« shkaktonte ndarjen e variablave tĂ« ciklit tĂ« thirrur nĂ« bashkĂ«punime (goroutine) nĂ« iteracione tĂ« ndryshme Ă«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 mĂ« parĂ«.
  • ËshtĂ« optimizuar puna me memorien nĂ« runtime, e cila ka rezultuar nĂ« njĂ« rritje tĂ« performancĂ«s prej 1-3% dhe njĂ« reduktim tĂ« ndjeshĂ«m tĂ« konsumit tĂ« memories nĂ« shumicĂ«n e aplikacioneve prej 1%.
  • Ka punuar pĂ«r angazhimin nĂ« kompajlerin optimizimeve tĂ« bazuara nĂ« rezultatet e profilizimit tĂ« kodit (PGO - optimizimi i udhĂ«hequr nga profili), qĂ« lejon tĂ« marrĂ« parasysh karakteristikat e pĂ«rcaktuara gjatĂ« ekzekutimit tĂ« programit. NĂ« versionin e ri, kompajleri ka pĂ«rdorur mjete devirtuazimi pĂ«r tĂ« zĂ«vendĂ«suar thirrjet jo tĂ« drejtpĂ«rdrejta tĂ« mĂ«nyrave tĂ« ndryshme me ekzekutimin e blloqeve inline tĂ« shtrira.
  • Me aktivizimin e PGO, ndryshimi i shtuar ka lejuar rritjen e performancĂ«s sĂ« shumicĂ«s sĂ« programeve nga 2-14%.
  • Kompajleri ka shtuar njĂ« zbatim eksperimental (GOEXPERIMENT=newinliner) tĂ« pĂ«rmirĂ«suar tĂ« mekanizmit tĂ« zhvillimit (inlining) tĂ« thirrjeve, duke pĂ«rdorur heuristikĂ«n pĂ«r tĂ« ndarĂ« operacionet e rĂ«ndĂ«sishme nga ato dytĂ«sore.
  • Biblioteka standarde ka shtuar paketĂ«n 'math/rand/v2', ku Ă«shtĂ« propozuar njĂ« API mĂ« gjithĂ«pĂ«rfshirĂ«s dhe janĂ« pĂ«rdorur algoritme mĂ« tĂ« shpejta pĂ«r gjenerimin e numrave pseudo-rastĂ«sorĂ«.
  • PaketĂ«s net/http.ServeMux i Ă«shtĂ« shtuar mundĂ«sia pĂ«r tĂ« specificuar metodat dhe maskat nĂ« shabllone, pĂ«r shembull, shablloni 'GET /static/{id}/' do tĂ« aplikohet nĂ« kĂ«rkesat me metodĂ«n HTTP 'GET' dhe do tĂ« mbajĂ« vlerĂ«n e segmentit tĂ« dytĂ« tĂ« rrugĂ«s sĂ« kĂ«rkuar nĂ« identifikuesin 'id'.
  • PaketĂ«s database/sql i Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r tipin Null[T], qĂ« lejon skanimin e kolonave qĂ« mund tĂ« pranojnĂ« vlerĂ«n NULL. PaketĂ«s slices i Ă«shtĂ« shtuar funksioni Concat pĂ«r tĂ« bashkuar disa slices tĂ« çdo tipi.
  • NĂ« komandat pĂ«r punĂ«n me hapĂ«sirat e punĂ«s (koleksione modulash) Ă«shtĂ« ofruar mundĂ«sia pĂ«r pĂ«rdorimin e katalogut 'vendor', qĂ« pĂ«rmban varĂ«sitĂ« pĂ«r pĂ«rmbajtjen e hapĂ«sirĂ«s sĂ« punĂ«s. Katalogu krijohet gjatĂ« ekzekutimit tĂ« komandĂ«s 'go work vendor' dhe pĂ«rdoret nĂ« komandat e ndĂ«rtimit duke vendosur opsionin '-mod=vendor' (ekskluzivisht kur ka njĂ« katalog vendor).

Ndryshimet në sjelljen e utiliteteve.

  • go get nuk mbĂ«shtetet mĂ« jashtĂ« modulit nĂ« modalitetin e vjetruar GOPATH (dmth me GO111MODULE=off). Komandat e tjera tĂ« ndĂ«rtimit, si go build dhe go test, do tĂ« vazhdojnĂ« tĂ« punojnĂ« pĂ«r programet e vjetra GOPATH pĂ«r njĂ« periudhĂ« tĂ« paçaktuar.
  • 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ç Ă«shtĂ« Gopkg.lock).
  • go test -cover tani tani printon tĂ« dhĂ«nat pĂ«rmbledhĂ«se mbi mbulimin pĂ«r paketat e mbuluara qĂ« nuk kanĂ« skedat e tyre tĂ« testeve. Para Go 1.22, go test -cover pĂ«r njĂ« paketĂ« tĂ« tillĂ« do tĂ« raportonte? mymod/mypack [nuk ka skeda testimi]

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

  • NdĂ«rfaqja web e mjetit trace Ă«shtĂ« pĂ«rmirĂ«suar pak nĂ« kuadĂ«r tĂ« mbĂ«shtetjes pĂ«r ndjekĂ«si tĂ« ri, janĂ« zgjidhur disa probleme dhe Ă«shtĂ« pĂ«rmirĂ«suar lexueshmĂ«ria e faqeve tĂ« ndryshme. NdĂ«rfaqja web tani mbĂ«shtet studimin e ndjekjeve nĂ« njĂ« pamje tĂ« orientuar nga rrjedha. Shikuesi i ndjekjes gjithashtu tregon pĂ«rfundimin e plotĂ« tĂ« tĂ« gjitha thirrjeve sistemike. KĂ«to pĂ«rmirĂ«sime janĂ« tĂ« aplikueshme vetĂ«m pĂ«r shikimin e ndjekjeve tĂ« krijuara nga programet e krijuara nĂ« Go 1.22 ose mĂ« tĂ« reja. NĂ« lĂ«shimin e ardhshĂ«m, disa nga kĂ«to pĂ«rmirĂ«sime do tĂ« aplikohen nĂ« ndjekjet e krijuara nga versionet e vjetra tĂ« Go.
  • Mjedisi i ekzekutimit tani ruan metadata tĂ« mbledhjes sĂ« plehrave nĂ« bazĂ« tĂ« tipeve mĂ« afĂ«r çdo objekti tĂ« heaps. Ky ndryshim gjithashtu zvogĂ«lon kostot e memories pĂ«r shumicĂ«n e aplikacioneve Go me rreth 1% pĂ«rmes deduplikimit tĂ« metadata-ve tĂ« tepĂ«rta. NĂ« disa aplikacione, pĂ«rmirĂ«simi mund tĂ« jetĂ« mĂ« i vogĂ«l, pasi ky ndryshim korrigjon kufijtĂ« e klasĂ«s sĂ« madhĂ«sisĂ« sĂ« alokuesit tĂ« memories, kĂ«shtu qĂ« disa objekte mund tĂ« zhvendosen nĂ« njĂ« klasĂ« madhĂ«sie mĂ« tĂ« madhe. Pasojat e kĂ«tij ndryshimi janĂ« se adresat e disa objekteve, tĂ« cilat mĂ« parĂ« ishin gjithmonĂ« tĂ« rregulluara nĂ« kufirin 16 byte (ose mĂ« lart), tani do tĂ« jenĂ« tĂ« rregulluara vetĂ«m nĂ« kufirin 8 byte. Disa aplikacione qĂ« pĂ«rdorin instrukcione assembler qĂ« kĂ«rkojnĂ« qĂ« adresat e memories tĂ« rregullohen nĂ« njĂ« madhĂ«si mĂ« tĂ« madhe se 8 byte dhe mbĂ«shteten nĂ« sjelljen e mĂ«parshme tĂ« rregullimit tĂ« alokuesit tĂ« memories, mund tĂ« dĂ«shtojnĂ«, por ne presim qĂ« kĂ«to aplikacione tĂ« jenĂ« tĂ« rralla. KĂ«to aplikacione mund tĂ« krijohen me GOEXPERIMENT=noallocheaders me mundĂ«sinĂ« e kthimit nĂ« modelin e mĂ«parshĂ«m tĂ« metadata-s dhe rikthimin e sjelljes sĂ« mĂ«parshme tĂ« rregullimit, por pronarĂ«t e paketave duhet tĂ« azhurnojnĂ« kodin e tyre assembler pĂ«r tĂ« shmangur supozimin mbi rregullimin, pasi ky kalim do tĂ« hiqet nĂ« lĂ«shimin e ardhshĂ«m.
  • Siç u pĂ«rmend nĂ« shĂ«nimet pĂ«r lĂ«shimin Go 1.20, Go 1.22 tani kĂ«rkon versionin pĂ«rfundimtar 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 Go 1.22 ose njĂ« version mĂ« tĂ« ri pĂ«r ndĂ«rtimin fillestar.
    Origjinali (go.dev)

Burimi: linux.org.ru

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