„Go 1.26“ išleista: „Green Tea“ šiukšlių surinkėjas, SIMD palaikymas ir kiti svarbūs patobulinimai
„Google“ išleido „Go 1.26“ – naujausią populiarios programavimo kalbos versiją, kurioje numatytiniu tapu „Green Tea“ šiukšlių surinkėjas, žadantis 10–40 % mažesnį GC apkrovimą. Taip pat pristatyti kalbos sintaksės patobulinimai, eksperimentinis SIMD palaikymas ir dešimtys kitų naujovių.
icecode.lt

Naujoji „Go" versija – daugiau nei tik eilinis atnaujinimas
2026 m. vasario mėnesį „Google" komanda oficialiai išleido Go 1.26 – naujausią populiariosios programavimo kalbos versiją, kuri ateina praėjus šešiems mėnesiams po „Go 1.25". Nors „Go" tradiciškai laikosi nuosaikios evoliucijos strategijos, ši versija atneša reikšmingų pokyčių: numatytiniu tapo eksperimentinis „Green Tea" šiukšlių surinkėjas, pristatyti du kalbos sintaksės patobulinimai, eksperimentinis SIMD palaikymas ir dešimtys standartinės bibliotekos naujovių.
„Go 1.26" išlaiko tradicinį suderinamumo pažadą – visos esamos programos turėtų veikti be pakeitimų. Tačiau po gaubtu slypintys pakeitimai yra itin reikšmingi, ypač našumo ir saugumo srityse.
„Green Tea" šiukšlių surinkėjas: 10–40 % mažesnis GC apkrovimas
Didžiausias šios versijos akcentas – „Green Tea" šiukšlių surinkėjas (angl. garbage collector), kuris „Go 1.25" buvo prieinamas kaip eksperimentinė funkcija, o dabar tampa numatytiniu. Jo pagrindinė idėja stebėtinai paprasta: vietoj to, kad būtų dirbama su atskirais objektais, „Green Tea" operuoja atminties puslapių lygmeniu.
Tradicinis „Go" šiukšlių surinkėjas naudoja tą patį „mark-sweep" (pažymėk ir surink) metodą, tačiau skenavo kiekvieną objektą atskirai visoje krūvoje (angl. heap). „Green Tea" vietoj to skenavo atmintį gretimais 8 KiB blokais, vadinamais spans, ir seka atskirus objektus tik lokaliai kiekviename bloke.
Rezultatai kalba patys už save:
- 10–40 % mažesnis GC apkrovimas realiose programose, kurios intensyviai naudoja šiukšlių surinkėją
- Papildomas ~10 % pagerinimas naujesnėse „amd64" platformose (Intel Ice Lake, AMD Zen 4 ir naujesnės), kur naudojamos vektorinės instrukcijos
- Pagerinta mažų objektų skenavimo lokalumas ir efektyvumas
Duomenų bazės, talpyklos ir API serveriai su sudėtingomis duomenų struktūromis – medžiais, grafais – gauna didžiausią naudą. Pavyzdžiui, geoerdvinė duomenų bazė „tile38" parodė 35 % GC apkrovimo sumažėjimą. Tiesa, ne visos darbo apkrovos vienodai pasipelno – „DoltHub" komanda savo testavime pastebėjo neutralius rezultatus.
Jei vis dėlto kiltų problemų, „Green Tea" galima išjungti nustatant GOEXPERIMENT=nogreenteagc kompiliavimo metu, tačiau ši galimybė bus pašalinta „Go 1.27" versijoje.
Kalbos sintaksės patobulinimai
„Go 1.26" pristato du kalbos lygmens pakeitimus, kurie, nors ir nedideli, supaprastina kasdienį programavimą.
Išplėsta „new" funkcija
Integruota funkcija new dabar priima išraiškas, leidžiančias nurodyti pradinę kintamojo reikšmę. Tai ypač naudinga dirbant su serializavimo bibliotekomis kaip encoding/json ar „Protocol Buffers":
Anksčiau norint sukurti rodyklę į apskaičiuotą reikšmę reikėjo kurti tarpinį kintamąjį. Dabar galima rašyti
new(yearsSince(born))tiesiogiai struktūros lauke.
Savireferentiniai generiniai tipai
Generiniai tipai dabar gali nurodyti save savo pačių tipo parametrų apribojimuose. Tai buvo anksčiau draudžiama ir apsunkindavo tam tikrų abstrakčių sąsajų bei duomenų struktūrų įgyvendinimą. Šis pakeitimas supaprastina specifikacijos taisykles ir atveria naujas galimybes matematinių bei algebrinių tipų modeliavimui.
Įrankių atnaujinimai: „go fix" tampa modernizatoriumi
Komanda go fix buvo visiškai perrašyta ir tapo „Go" modernizatorių namais. Naujoji versija, paremta „Go" analizės karkasu (tuo pačiu, kuris naudojamas go vet), apima dešimtis analizatorių, kurie siūlo saugius kodo atnaujinimus, padedančius išnaudoti naujesnes kalbos ir standartinės bibliotekos galimybes.
Ypač vertinga naujovė – šaltinio lygmens inlaineris su //go:fix inline direktyvomis, leidžiantis kūrėjams žymėti funkcijas, kurias go fix automatiškai „įterps" (angl. inline) į kviečiantį kodą. Tai puikus įrankis API migracijoms ir pasenusių funkcijų pakeitimui.
Eksperimentinis SIMD palaikymas
Viena įdomiausių naujovių – eksperimentinis simd/archsimd paketas, įjungiamas su GOEXPERIMENT=simd. Šis paketas suteikia prieigą prie architektūrai specifinių SIMD (Single Instruction, Multiple Data) operacijų.
Šiuo metu palaikoma tik „amd64" architektūra su 128, 256 ir 512 bitų vektoriniais tipais, tokiais kaip Int8x16, Float64x8, ir operacijomis kaip .Add(). API dar nėra stabili, o palaikymas kitoms architektūroms planuojamas ateityje. Tai svarbus žingsnis „Go" link aukšto našumo skaičiavimų srities, kur iki šiol dominavo C, C++ ir „Rust".
Gorutinų nutekėjimo aptikimas
Dar viena eksperimentinė, bet praktiškai labai vertinga naujovė – gorutinų nutekėjimo profiliavimas. Įjungus GOEXPERIMENT=goroutineleakprofile, „Go" vykdymo aplinka gali aptikti gorutinas, užblokuotas ant lygiagretumo primityvų (kanalų, mutex'ų), kurios niekada negalės būti atblokuotos.
Aptikimas remiasi šiukšlių surinkėjo pasiekiamumo analize – jei nei vienas kitas aktyvus kodas nelaiko nuorodos į kanalą ar mutex'ą, ant kurio gorutina laukia, ji laikoma „nutekėjusia". Ši funkcija neprideda jokio vykdymo apkrovimo, kol nėra aktyviai naudojama, ir yra pasiekiama per /debug/pprof/goroutineleak galutinį tašką.
Postkvancinė kriptografija tampa numatytąja
Saugumo srityje „Go 1.26" daro svarbų žingsnį: hibridiniai postkvanciniai raktų mainai dabar įjungti pagal nutylėjimą TLS konfigūracijoje. Palaikomi SecP256r1MLKEM768 ir SecP384r1MLKEM1024 algoritmai, paremti ML-KEM standartu, kuris laikomas atsparus kvantiniu kompiuteriui.
Taip pat pristatytas naujas crypto/hpke paketas, įgyvendinantis hibridinį viešojo rakto šifravimą (RFC 9180) su postkvancinių hibridinių KEM palaikymu. Kriptografinės bibliotekos dabar visada naudoja saugų atsitiktinumą – anksčiau buvo galima perduoti pasirinktinį atsitiktinumo šaltinį, bet dabar šis parametras ignoruojamas.
Kiti svarbūs pakeitimai
- cgo sparta: bazinis cgo iškvietimų apkrovimas sumažintas ~30 %
io.ReadAll: ~2 kartus spartesnis su ~50 % mažesniu atminties paskirstymu- Krūvos adreso randomizacija: 64 bitų platformose krūvos bazinis adresas dabar atsitiktinis – tai apsunkina atminties adresų nuspėjimą atakuotojams
- WebAssembly: vykdymo aplinka dabar valdo krūvą mažesniais žingsniais, reikšmingai sumažindama atminties naudojimą programoms su mažesnėmis nei 16 MiB krūvomis
- Naujas
errors.AsType(): generinė, tipui saugi ir spartesnėerrors.As()versija log/slog.NewMultiHandler(): leidžia siųsti žurnalo įrašus keliems tvarkytojams vienu metu- PKCS #1 v1.5 šifravimas pažymėtas kaip pasenęs – rekomenduojama pereiti prie saugesnių alternatyvų
Platformų palaikymas
Verta atkreipti dėmesį, kad „Go 1.26" yra paskutinė versija, palaikanti „macOS 12 Monterey" – nuo „Go 1.27" reikės bent „macOS 13 Ventura". Taip pat pašalintas 32 bitų windows/arm palaikymas, o linux/riscv64 dabar palaiko lenktynių aptikiklį (angl. race detector).
Ką tai reiškia programuotojams?
„Go 1.26" aiškiai rodo, kad „Go" kalba bręsta ir stiprėja tose srityse, kurios svarbios gamybinėms sistemoms: našumas, saugumas ir kūrėjų patirtis. „Green Tea" šiukšlių surinkėjas gali reikšmingai sumažinti GC pauzių poveikį, postkvancinė kriptografija ruošia programas kvantinio kompiuterio erai, o tokie įrankiai kaip gorutinų nutekėjimo aptikimas ir atnaujintas go fix padeda rašyti kokybiškesnį kodą.
Atnaujinti galima paprastai – atsisiuntus naujausią versiją iš oficialios „Go" svetainės arba naudojant paketų tvarkyklę. Kaip visada, „Go" komanda rekomenduoja perskaityti pilnas išleidimo pastabas prieš atnaujinant gamybines sistemas.
Šaltiniai
- Go 1.26 is released – The Go Programming Language
- Go 1.26 Release Notes
- Go 1.26 unleashes performance-boosting Green Tea GC – InfoWorld
- Go 1.26 Introduces Two Language Changes – Phoronix
- Go 1.26 Introduces new Expression Support – Linuxiac
- The Green Tea Garbage Collector – The Go Programming Language
Dalintis straipsniu