Go komanda 7. jūlijā izlaida go1.27rc2 — otro laidiena kandidāti valodas versijai 1.27, kas ienesīs to, ko izstrādātāji gaida kopš ģenerikas parādīšanās Go 1.18 pirms četriem gadiem: metodes drīkstēs deklarēt pašas savus tipu parametrus. Stabilā versija plānota augustā, un pirmā kandidāte iznāca 18. jūnijā.
Līdz šim ģeneriskus tipu parametrus Go varēja likt tikai funkcijām un tipu deklarācijām, ne metodēm. Tas nozīmēja, ka bibliotēku autoriem nācās rakstīt brīvas funkcijas tur, kur būtu skaidrāk saukt metodi uz esoša tipa — piemēram, kolekcijas tips nevarēja piedāvāt savu Map vai Filter metodi ar patvaļīgu izejas tipu. 1.27 šo ierobežojumu noņem.
Ģeneriskās metodes un divi mazāki valodas labojumi
Metode tagad drīkst pievienot savus tipu parametrus, tāpēc ģenerisku loģiku var turēt konkrēta datu tipa nosaukumu telpā, nevis izkaisīt pa pakotni. Divi ierobežojumi paliek: interfeisa metodes tipu parametrus deklarēt nedrīkst, un interfeisu nevar apmierināt ar ģenerisku metodi. Tas notur tipu sistēmu izlemjamu.
Kopā ar to nāk vēl divi sīkumi, kas nolīdzina asās malas. Struktūras literāļa atslēga tagad pieņem jebkuru derīgu lauka selektoru, kur agrāk derēja tikai augšējā līmeņa lauka nosaukums. Un funkcijas tipu izsecināšana strādā visos kontekstos, kur ģenerisku funkciju piešķir mainīgajam vai pārveido par atbilstošu funkcijas tipu, tāpēc tipu parametri retāk jāraksta ar roku.
json/v2 pārraksta parsēšanu, un tas jau strādā zem vecā API
Standarta bibliotēka iegūst divas jaunas pakotnes: encoding/json/v2 un zemāka līmeņa encoding/json/jsontext. Jaunais v2 API lieto mainīga garuma Options parametrus un pēc noklusējuma ir stingrāks — noraida nederīgu UTF-8 un dublētus objekta laukus.
Svarīgākais praktiskais efekts: vecais encoding/json tagad iekšēji balstās uz v2. Uzvedība saglabāta, kļūdu teksti var atšķirties, marshaling ātrums tāds pats, bet unmarshaling — būtiski ātrāks. Kas negrib pāreju, būvē ar GOEXPERIMENT=nojsonv2.
Vecais json paliek vietā, jaunais dzinējs strādā zem tā. Vairumam projektu pietiek ar pārbūvi un ātrāku unmarshaling bez neviena koda labojuma.
Pēckvantu paraksti nonāk standarta bibliotēkā
1.27 pievieno pakotni crypto/mldsa ar FIPS 204 ML-DSA parakstu shēmu. To saprot arī crypto/x509 un crypto/tls: TLS 1.3 rokasspiedienā parādās jauni paraksta veidi MLDSA44, MLDSA65 un MLDSA87. Papildus TLS klients tagad prot MLKEM1024 atslēgu apmaiņu.
Tā ir tā pati kustība virzienā uz kvantu drošu kriptogrāfiju, ko šogad redzam citur — pirms pāris nedēļām OpenSSH 10.4 pievienoja ML-DSA parakstus. Go to ievieto tieši valodas komplektācijā, tāpēc serverim vai klientam nav jāgaida ārējā bibliotēka.
Ātrāka atmiņas piešķiršana un pārstrādātais go fix
Izpildlaiks iegūst izmēram specializētas atmiņas piešķiršanas rutīnas. Mazu, līdz 80 baitu lielu, objektu piešķiršana kļūst līdz 30% lētāka, kopējais ieguvums piešķiršanas smagās programmās ap 1%. Cena — binārā faila pieaugums aptuveni 60 KB. Izslēgt var ar GOEXPERIMENT=nosizespecializedmalloc; Go 1.28 šo eksperimentu paredzēts noņemt, atstājot uzvedību par noklusējumu.
Rīku pusē turpinās go fix pārstrāde par Go modernizētāju māju. 1.27 pievieno jaunus labotājus — atomictypes, embedlit, slicesbackward un unsafefuncs. Komanda go doc tagad saprot sintaksi package@version un ar karodziņu -ex uzskaita izpildāmos piemērus. Sīks, bet drošības ziņā jūtams labojums: go tool trace pēc noklusējuma klausās tikai uz localhost, tāpat kā jau dara go tool pprof.
Kas vēl mainās standarta bibliotēkā
Zem lielajām ziņām ir sarindojušies labojumi, kas ikdienas kodā jūtami uzreiz. Izpildlaiks tagad piedāvā jaunu goroutineleak profilu, kas atrod gorutīnas, kuras iestrēgušas uz nesasniedzamiem sinhronizācijas primitīviem — klasiskā gorutīnu noplūde, ko līdz šim nācās meklēt ar roku. Standarta bibliotēka iegūst arī pakotni uuid identifikatoru ģenerēšanai un parsēšanai, tā ka atkrīt viena no biežāk pievienotajām ārējām atkarībām.
Pakotnēs strings un bytes parādās funkcija CutLast, math/rand/v2 iegūst ģenerisku Rand.N metodi, bet net/url — Clone metodes gan pašam URL, gan Values. Unicode tabulas pārceltas no versijas 15 uz 17. Komanda go mod tidy Go 1.27 moduļiem tagad automātiski apvieno dublētos require blokus, atstājot vienu tiešajām un vienu netiešajām atkarībām. No versiju kontroles sistēmām izmesta Bazaar (bzr) atbalsts, un darbam uz macOS tagad vajag vismaz Ventura (13. versiju).
Kā izmēģināt tagad
Kandidāti var uzlikt blakus esošajai instalācijai, neaizvietojot to. Go komanda aicina palaist ražošanas slodzes un vienībtestus tieši uz šīs versijas, jo tā ir īstā vieta, kur atrast regresijas pirms stabilā laidiena:
go install golang.org/dl/go1.27rc2@latestgo1.27rc2 download
Kļūdas ziņo go.dev/issue/new. RC2 papildus atslēdza divas drošības kļūdas — os.Root simboliskās saites izbēgšanu Unix un crypto/tls Encrypted Client Hello privātuma noplūdi. Ja tavs projekts izmanto kādu no eksperimentālajām karodziņu izslēgtajām funkcijām, pārbaudi to tieši tagad, ne augustā, kad pāreja būs jau notikusi.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.