On esitles program keele Go 1.22, mida arendab Google koos kogukonnaga hĂŒbriidlahendusena, mis ĂŒhendab komplitseerivate keelte kĂ”rge jĂ”udluse ning skriptikeelte eelised, nagu koodi kirjutamise lihtsus, kiire arendus ja vigade kaitse. Projekti kood on jagatud BSD-litsentsi alusel.
Go sĂŒntaks pĂ”hineb tuttavatel C-keele elementidel, koos eri osade laenamisega Oberoni keelest. Keel on piisavalt lakooniline, kuid samas on kood hĂ”lpsasti loetav ja arusaadav. Go kood kompileeritakse iseseisvatesse binaarsetesse kĂ€ivitatavatesse failidesse, mis töötavad natiivselt, ilma virtuaalmasinata (profiilimise, silumise ja teiste jooksuaegsete probleemide avastamise alamsĂŒsteemide moodulid on integreeritud jooksva komponentidena), mis vĂ”imaldab saavutada jĂ”udlust, mis sarnaneb C-keeles kirjutatud programmidega.
Projekt on algselt arendatud silmas pidades mitme lĂ”ime programmeerimist ja tĂ”husat tööd mitme sĂŒdamiku sĂŒsteemides, pakkudes sealhulgas korraldusvahendeid paralleelsete arvutuste ja paralleelselt töötavate meetodite vahelise suhtluse korraldamiseks. Keel pakub ka sisseehitatud vahendeid mĂ€lu lubamatute alade ĂŒlesaamise eest kaitsmiseks ning toob kaasa vĂ”imaluse kasutada prĂŒgikollektsiooni.
Among the changes in the new release:
- For tsĂŒklitesse on lisatud tugi tĂ€isarvude vahemike mÀÀramiseks, nĂ€iteks 0 kuni 9 vÀÀrtuste iteratsiooniks saab nĂŒĂŒd kasutada tsĂŒklit "for i := range 10 {âŠ}".
- For tsĂŒklitesse on lisatud eksperimentaalne (GOEXPERIMENT=rangefunc) tugi vahemike mÀÀramise funktsioonide jaoks, mis vĂ”imaldab mÀÀrata funktsiooni iteratooriks. NĂ€iteks "for i, x := range slices.Backward(s) {âŠ}".
- On lahendatud pikaajaline probleem for tsĂŒklite osas, mis tekitas korraga lotitud muutuja jagamist erinevates iteratsioonides koos korutustega (goroutine). NĂ€iteks kood values := []string{"a", "b", "c"} for _, v := range values { go func() { fmt.Println(v) done <- true } } trĂŒkkib nĂŒĂŒd "a", "b" ja "c", mitte ainult "c", nagu see oli varem.
- Runtime'i mÀlu kÀsitlemine on optimeeritud, mis on toonud kaasa jÔudluse kasvu 1-3% ning enamiku rakenduste mÀlu tarbimise vÀhenemise 1%.
- JĂ€tkub töö parandusoptimeerimise rakendamiseks kompilaatoris, mis pĂ”hineb koodi profileerimise tulemustel (PGO â profile-guided optimization), vĂ”imaldades arvesse vĂ”tta omadusi, mis mÀÀratakse programmi kĂ€imise ajal. Uues versioonis on kompilaatoris kasutusele vĂ”etud devirtuaalimise tööriistad, et asendada erinevate meetodite kaudsed kutsed lahti kirjutatud inline-blokkide tĂ€itmisega.
- PGO sisselĂŒlitamisel on lisamuudatus toonud kaasa enamikus programmidest jĂ”udluse tĂ”usu 2-14%.
- Kompilaatorisse on lisatud eksperimentaalne (GOEXPERIMENT=newinliner) tÀiustatud mehhanismi rakendamise (inlining) teostus, mis kasutab heuristikat oluliste ja vÀhemoluliste operatsioonide eristamiseks.
- Standardbibliotekisse on lisatud pakett «math/rand/v2», kus on pakutud terviklikumat API-d ja kasutusele on vÔetud kiiremad psudo-juhuslike arvude genereerimise algoritmid.
- Pakett net/http.ServeMux on saanud uue vĂ”imaluse mÀÀrata meetodeid ja mustreid ĆĄabloonides, nĂ€iteks ĆĄabloon «GET /static/{id}/» rakendatakse HTTP meetodiga «GET» pĂ€ringutele ja sÀÀstab teise kĂŒsitud teeraja segmendi vÀÀrtuse tunnuses «id».
- Paketti database/sql on lisatud tugi Null[T] tĂŒĂŒbi jaoks, mis vĂ”imaldab skaneerida veerge, mis vĂ”ivad sisaldada NULL vÀÀrtust. Paketti slices on lisatud funktsioon Concat, et ĂŒhendada mitmeid slaide mis tahes tĂŒĂŒbist.
- Tööruumide (moodulite kogude) kĂ€sud vĂ”imaldavad nĂŒĂŒd kasutada katalooge «vendor», mis sisaldavad sĂ”ltuvusi tööruumi sisule. Kataloog luuakse kĂ€su âgo work vendorâ tĂ€itmisel ja seda kasutatakse ehituskomandodes, kui seatakse valik "-mod=vendor" (sh automaatselt, kui «vendor» kataloog on olemas).
Muutused utiliitide kÀitumises.
- go get ei toetata enam vĂ€ljaspool moodulit vananenud GOPATH reĆŸiimis (st GO111MODULE=off). Teised ehituskomandod, nagu go build ja go test, jĂ€tkavad töötamist vananenud GOPATH programmide jaoks mÀÀramata aja jooksul.
- go mod init ei pĂŒĂŒa enam importida sĂ”ltuvuste nĂ”udeid muude pakkujate konfiguratsioonifailidest (nt Gopkg.lock).
- go test -cover nĂŒĂŒd prindib ĂŒlevaate katteandmetest katmiseks mĂ”eldud pakettide kohta, millel pole oma testifailid. Enne Go 1.22 teatas go test -cover sellise paketi kohta? mymod/mypack [no test files]
Ja nĂŒĂŒd, alates Go 1.22, peetakse paketi funktsioone katmata: mymod/mypack coverage: 0.0% of statements. Pange tĂ€hele: kui paketil ei ole ĂŒldse tĂ€itevkoodi, ei saa me edastada tĂ€henduslikku katte protsenti; selliste pakettide puhul jĂ€tkab go test teavitamist testifailide puudumisest.
- Trace'i tööriista veebiliides on saanud kerge uuenduse seoses uue traceback'i toetamistööd, parandatud on mĂ”ned probleemid ja erinevate lehtede loetavust on parendatud. Veebiliides toetab nĂŒĂŒd jĂ€lgimisprotsesside uurimist voogude orienteeritud vaates. Trace'i vaatamine nĂ€itab nĂŒĂŒd ka kĂ”igi sĂŒsteemikutsungite tĂ€ielikku kestust. Need tĂ€iendused kehtivad ainult jĂ€lgimiste vaatamiseks, mis on loodud programmide abil, mis on loodud Go 1.22 vĂ”i uuema versiooni abil. Tulevases vĂ€ljaandes toovad mĂ”ned neist tĂ€iustustest kaasa ka jĂ€lgimised, mis on loodud vana Go versiooniga.
- TĂ€itmisajad salvestavad nĂŒĂŒd prĂŒgikogu metaandmed tĂŒĂŒpide alusel, mis on iga heap-objekti lĂ€hedal. See muudatus vĂ€hendab ka enamikus Go programmides mĂ€lukulu umbes 1% tĂ€nu ĂŒleliigsete metaandmete eemaldamisele. MĂ”nedes programmides vĂ”ib parandus olla vĂ€iksem, kuna muudatus kohandab mĂ€lja jagaja suuruse klassi piire, mistĂ”ttu mĂ”ned objektid vĂ”ivad liikuda kĂ”rgema suuruse klassi peale. Selle muudatuse tagajĂ€rjeks on see, et mĂ”ned objektide aadressid, mis varem olid alati 16-baiti (vĂ”i rohkem) piiri jĂ€rgi joondatud, on nĂŒĂŒd joondatud vaid 8-baiti piiri jĂ€rgi. MĂ”ned programmid, mis kasutavad assembleri juhiseid, mis nĂ”uavad, et mĂ€lu aadressid oleksid suuremate kui 8-baiti suurusega joondatud ja sĂ”ltuvad eelnevast mĂ€lja joondamise kĂ€itumisest, vĂ”ivad ebaĂ”nnestuda, kuid me ootame, et selliseid programme on harva. Selliseid programme saab luua koos GOEXPERIMENT=noallocheaders, mis vĂ”imaldab naasta vanale metaandmete mudelile ja taastada eelneva joondamise kĂ€itumise, kuid paketihalduritel on soovitatav oma assembleri kood uuendada, et vĂ€ltida joondamise eeldusi, kuna see lahendus eemaldatakse tulevases vĂ€ljalaske.
- Nagu mainitud Go 1.20 vĂ€ljalaske mĂ€rkustes, nĂ”uab Go 1.22 nĂŒĂŒd algset ehitust viimase versiooni Go 1.20 vĂ”i uuema. Ootame, et Go 1.24 nĂ”uab algset ehitust viimase versiooni Go 1.22 vĂ”i uuema.
Originaal (go.dev)
Allikas: linux.org.ru
