È stata presentata Go 1.20, la versione di produzione del linguaggio open-source creato da Google, famoso per la sua semplicità, la concurrency e le caratteristiche di programmazione funzionale, con un'anteprima dell'ottimizzazione guidata dal profilo (PGO) per il compilatore. Go 1.20 può essere scaricato dal sito ufficiale go.dev.
Con l'anteprima di PGO in Go 1.20, la toolchain del compilatore può eseguire ottimizzazioni specifiche per le applicazioni e i carichi di lavoro in base alle informazioni sul profilo del runtime. Il compilatore attuale supporta i profili CPU pprof, che possono essere raccolti utilizzando i pacchetti runtime/pprof o net/http/pprof.
Conosciuto anche come feedback-directed optimization, PGO prevede l'invio al compilatore dei dati del profilo provenienti da esecuzioni rappresentative dell'applicazione per la successiva compilazione dell'applicazione. Utilizzando queste informazioni, il compilatore può prendere decisioni di ottimizzazione più informate. I benchmark di un insieme rappresentativo di programmi Go mostrano che l'attivazione dell'ottimizzazione dell'inlining PGO aumenta le prestazioni di circa il 3-4%. Si prevede che le versioni future introdurranno altre ottimizzazioni PGO.
Oltre all'introduzione di PGO, Go 1.20 apporta anche quattro modifiche al linguaggio. In primo luogo, la possibilità di convertire una slice in un puntatore ad array, introdotta in Go 1.17 del 2021, si estende ora alle conversioni da slice ad array. In secondo luogo, il pacchetto unsafe include tre nuove funzioni: SliceData, String e StringData. Queste funzioni offrono la capacità completa di costruire e decostruire valori slice e string, indipendentemente dalla loro esatta rappresentazione.
In terzo luogo, la specifica stabilisce che i valori struct vengono confrontati un campo alla volta, tenendo conto dei campi nell'ordine in cui appaiono nella definizione del tipo struct e fermandosi alla prima mancata corrispondenza. In quarto luogo, i tipi comparabili come le interfacce ordinarie possono soddisfare i vincoli di comparabilità, anche se gli argomenti del tipo non sono strettamente comparabili. Ciò consente l'istanziazione di un parametro di tipo vincolato da vincoli comparabili con un argomento di tipo non strettamente comparabile, come un tipo di interfaccia o un tipo composito che contiene un tipo di interfaccia.
Oltre a queste modifiche al linguaggio, Go 1.20 presenta diversi altri miglioramenti, come il supporto della raccolta dei profili di copertura del codice per i programmi, comprese le applicazioni e i test di integrazione. La directory $GOROOT/pkg non conserva più le attività dei pacchetti precompilati per la libreria standard, il che riduce le dimensioni della distribuzione di Go ed evita la distorsione della catena di strumenti C per i pacchetti cgo. Inoltre, l'implementazione di go test -json è stata rafforzata per aumentare la robustezza, mentre il comando go version -m ora legge una gamma più ampia di binari Go, comprese le DLL di Windows e i binari Linux senza permesso di esecuzione.
Go 1.20 porta anche un supporto sperimentale per FreeBSD su RISC-V e disabilita cgo per impostazione predefinita sui sistemi senza una toolchain C. Tuttavia, Go 1.20 sarà l'ultima release a supportare macOS 10.13 High Sierra e 10.14 Mojave, mentre Go 1.21 richiederà macOS 10.15 Catalina o versioni successive.
No-code piattaforma come AppMaster.io può trarre grandi benefici dall'incorporazione di linguaggi ottimizzati come Go 1.20. Integrando questi potenti strumenti per applicazioni web, mobili e backend, le aziende possono ottenere miglioramenti significativi in termini di produttività, esperienza utente e scalabilità. Scoprite di più sullo sviluppo di applicazionino-code e low-code per essere sempre all'avanguardia.