Salta al contenuto principale

Go 1.27 è disponibile: metodi generici, JSON più veloce e crittografia post-quantum

Inviato da tuxsa il
Go logo

Il Go Team ha pubblicato Go 1.27, nuova versione del linguaggio di programmazione open source nato in Google e oggi utilizzato in una quantità enorme di infrastrutture cloud, strumenti DevOps, servizi di rete e applicazioni server. Il nuovo rilascio interviene sul linguaggio, sulla toolchain, sul runtime e sulla libreria standard, introducendo alcune novità attese da tempo e preparando Go anche alla futura transizione verso la crittografia post-quantum.

Una delle novità più importanti riguarda i generic methods. Go dispone dei generics dalla versione 1.18, ma fino a oggi i metodi non potevano dichiarare propri parametri di tipo. Con Go 1.27 questa limitazione viene rimossa, permettendo di utilizzare la programmazione generica in maniera più naturale all'interno dei tipi definiti dagli sviluppatori.

È un cambiamento significativo per un linguaggio che storicamente ha privilegiato la semplicità rispetto all'aggiunta di nuove caratteristiche. Go continua infatti a evolversi con una certa prudenza: le nuove funzionalità vengono generalmente introdotte soltanto quando il progetto ritiene che il vantaggio ottenuto giustifichi l'aumento di complessità.

Un'altra importante novità riguarda JSON, formato utilizzato praticamente ovunque nello sviluppo Web e nelle API.

Go 1.27 introduce i nuovi pacchetti encoding/json/v2 ed encoding/json/jsontext. Il primo costituisce una profonda revisione della storica implementazione JSON della libreria standard, mentre il secondo offre strumenti di livello più basso per elaborare direttamente token e valori JSON.

La nuova implementazione utilizza inoltre impostazioni predefinite più rigorose per migliorare l'interoperabilità e la correttezza dei dati. La vecchia API non viene però abbandonata: il tradizionale encoding/json continua a essere supportato e mantiene il comportamento precedente, pur beneficiando internamente della nuova implementazione.

Secondo gli sviluppatori, le prestazioni nella codifica rimangono sostanzialmente comparabili con quelle precedenti, mentre la decodifica JSON risulta sensibilmente più veloce.

Miglioramenti interessanti arrivano anche nella gestione della memoria. Il compilatore può ora utilizzare routine specializzate in funzione delle dimensioni delle allocazioni, riducendo fino al 30% il costo di alcune piccole allocazioni inferiori a 80 byte. Nei programmi reali particolarmente dipendenti dalle allocazioni, il team stima un miglioramento complessivo nell'ordine dell'1%.

Go 1.27 introduce inoltre uno strumento particolarmente utile per individuare le goroutine bloccate permanentemente.

Il nuovo profilo goroutineleak, sperimentale nella precedente versione e ora considerato stabile, permette al runtime di individuare una parte delle goroutine che non potranno più essere sbloccate. Per applicazioni server e servizi che rimangono in esecuzione per mesi, trovare questo tipo di problema può essere estremamente importante.

Ma una delle novità più interessanti guarda ancora più avanti.

La libreria standard integra ora il nuovo pacchetto crypto/mldsa, che implementa ML-DSA, lo schema di firma digitale post-quantum definito dallo standard FIPS 204.

L'obiettivo della crittografia post-quantum è sviluppare algoritmi capaci di resistere anche ad attacchi effettuati attraverso futuri computer quantistici sufficientemente potenti. Non significa che gli attuali sistemi crittografici siano improvvisamente diventati inutilizzabili, ma la transizione richiederà anni e deve quindi essere preparata con largo anticipo.

Go 1.27 integra ML-DSA anche nei pacchetti crypto/x509 e crypto/tls, consentendo di utilizzare queste firme all'interno dei certificati e di TLS 1.3.

È un passaggio particolarmente significativo perché Go viene utilizzato per costruire moltissimo software destinato alle infrastrutture Internet. Kubernetes, Docker, Prometheus, Grafana, Terraform e numerosi altri strumenti fondamentali del moderno ecosistema cloud sono scritti interamente o in larga parte in Go.

Quando una tecnologia crittografica entra nella libreria standard di un linguaggio così diffuso, la sua adozione diventa potenzialmente molto più semplice per migliaia di progetti.

Il rilascio introduce anche numerosi miglioramenti agli strumenti di sviluppo. go doc può ora consultare direttamente una specifica versione di un pacchetto, go fix dispone di nuovi strumenti per modernizzare automaticamente il codice e go mod tidy riorganizza in maniera più coerente le dipendenze contenute nei file go.mod.

Come avviene ormai da molti anni, il progetto mantiene inoltre la promessa di compatibilità Go 1: quasi tutti i programmi esistenti dovrebbero continuare a compilare e funzionare senza modifiche.

Ed è forse proprio questo equilibrio a spiegare parte del successo del linguaggio.

Go non cerca di introdurre continuamente nuove caratteristiche per inseguire ogni tendenza della programmazione. Evoluzione del linguaggio, prestazioni, strumenti e libreria standard procedono mantenendo una forte attenzione alla compatibilità del software già esistente.

Con Go 1.27 questa filosofia incontra però anche una trasformazione destinata a interessare tutto il settore informatico: preparare oggi il Software Libero alla crittografia di un mondo nel quale i computer quantistici potrebbero un giorno cambiare le regole della sicurezza digitale.