Pärast kuue kuu arendustööd on välja antud programmeerimiskeele Go 1.26 versioon, mida arendab Google koos kogukonnaga. Keele omadused ühendavad kompilatsioonikeelte kõrge jõudluse skriptikeelte eelistega, nagu koodi kirjutamise lihtsus, kiire arendusaeg ja vigade kaitse. Projekti kood on litsentseeritud BSD litsentsi alusel.
Go süntaks põhineb tavalistel C keele elementidel, kus on eraldi laenud Oberoni keelest. Keel on piisavalt lühike, kuid samas on kood kergesti loetav ja arusaadav. Go keeles kirjutatud kood kompileeritakse eraldi binaarfailideks, mis töötavad kohaliku taseme teenustes, ilma virtuaalmasina kasutamiseta (profiliseerimis- ja tõrkeotsingu moodulid ning muud probleemide tuvastamise alamsüsteemid integreeritakse runtime-komponentidena), mis võimaldab saavutada tootlikkuse, mis on sarnane C keeles kirjutatud programmidega.
Projekt on algselt välja töötatud silmas pidades mitme südamiku süsteemide tõhusat töötlust ja mitme lõime programmeerimist. Näiteks on operaatorite tasemel välja töötatud vahendid paralleelsete arvutuste ja paralleelselt töötavate meetodite vaheliseks suhtlemiseks. Keel pakub ka sisseehitatud kaitsevahendeid mälu piire ületamise eest ning võimaldab prügikoguja kasutamist.
Uue väljaande muudatused:
- Vaikimisi on lisatud prügi kogumise tööriist «greenteagc», mis on suunatud väikeste objektide loomise ja skaneerimise jõudluse parandamisele. Rakendustes, kus prügikogumine on intensiivne, täheldatakse «greenteagc» kasutamisel prügikogumise kulude vähenemist 10-40%.
- Sisseehitatud funktsioonis new(), mis on mõeldud uute muutujate loomiseks, on nüüd võimalik määrata väljend operandi kujul, mis määrab muutuja algväärtuse. Näiteks, selle asemel et kirjutada: x := int64(300) ptr := &x, saab nüüd kirjutada: ptr := new(int64(300)).
- Üldistes tüüpides (generic) on lubatud viidata iseendale tüübi argumentide loendis (saab tüübiks määrata oma enda parameetri). Allolevas näites, kus Adder viitab iseendale, ei tekita see enam viga: type Adder[A Adder[A]] interface { Add(A) A } func algo[A Adder[A]](x, y A) A { return x.Add(y) }
- C-keeles funktsioonide kutsumise kulud Go-koodist cgo kaudu on vähenenud umbes 30%.
- 64-bitistel platvormidel on käitamisaja jooksul rakendatud aadresside ruumi randomiseerimist käivitamisel, mis raskendab aadresside ennustamist mälus, kui püüda ära kasutada C-koodis, mis on seotud cgo'ga, leiduvate haavatavuste korral. Randomiseerimise väljalülitamiseks on soovitatud valikut "GOEXPERIMENT=norandomizedheapbase64".
- Komplektor on laiendanud olukordade arvu, kus mäluruum määratakse slaidide jaoks virna, mitte hunnikusse, mis avaldab positiivset mõju jõudlusele.
- Komandi „go fix“ rakendamine on täielikult ümber kirjutatud, kasutades analüüsipaketti, mis pakub koodi statistilise analüüsi funktsionaalsust. Lisatud tugi paketi modernize analüsaatoritele, mis pakuvad koodi lihtsustamiseks parandusettepanekuid, arvestades keele ja standardteeki uusi võimalusi. Lisatud analüsaator „inline“ kõikide funktsioonikutsede inline-lahendamiseks, mis on märgitud direktiiviga „//go:fix inline“.
- Lisatud uued paketid crypto/hpke (HPKE — hübriidne avaliku võtme krüpteerimine), crypto/mlkem/mlkemtest ja testing/cryptotest.
- Lisatud eksperimentaalne pakett simd/archsimd, mis pakub madala taseme juurdepääsu vektorkäskluste täitmisele, kasutades SIMD-käske AMD64 arhitektuuriga süsteemides.
- Lisatud eksperimentaalne pakett runtime/secret, mis võimaldab ohutut puhastamist (nullimist) ajutise mälu, mis on eraldatud määratud funktsiooni käitamise ajal.
- Paketti runtime/pprof on lisatud eksperimentaalne goroutineleak profiil, mis aitab tuvastada goroutine'i lekkeid.
Allikas: opennet.ru
