Uscita del linguaggio di programmazione Go 1.24

Dopo sei mesi di sviluppo, è stato presentato il rilascio del linguaggio di programmazione Go 1.24, sviluppato da Google con la partecipazione della comunità. Il linguaggio combina le alte prestazioni tipiche dei linguaggi compilati con i vantaggi dei linguaggi di scripting, come la facilità di scrittura del codice, l'alta velocità di sviluppo e la protezione dagli errori. Il codice del progetto è distribuito sotto licenza BSD.

La sintassi di Go si basa su elementi familiari del linguaggio C, con alcune influenze dal linguaggio Oberon. Il linguaggio è abbastanza conciso, ma il codice è facilmente leggibile e comprensibile. Il codice scritto in Go viene compilato in file binari eseguibili autonomi, eseguiti nativamente senza l'uso di una macchina virtuale (i moduli di profiling, debugging e altre sottosistemi di rilevamento dei problemi sono integrati come componenti runtime), il che consente di raggiungere prestazioni comparabili a quelle dei programmi scritti in C.

Il progetto è stato originariamente sviluppato tenendo presente la programmazione multithread e l'efficiente funzionamento su sistemi multiprocessore. Ad esempio, a livello di operatori, sono stati implementati strumenti per organizzare calcoli paralleli e interazioni tra metodi eseguiti in parallelo. Il linguaggio fornisce anche strumenti integrati per la protezione contro il buffer overflow e consente l'uso di un garbage collector.

Tra le novità della nuova versione:

  • È stata fornita una completa supporto per gli alias di tipo generico: l'alias di tipo può essere parametrizzato come un tipo definito per la prima volta (ora è possibile specificare parametri di tipo durante la definizione dell'alias di tipo). type set[P comparable] = map[P]bool
  • Sono state apportate ottimizzazioni al runtime che hanno portato a una riduzione del carico sulla CPU del 2-3% durante i test di prestazioni standard. Tra le ottimizzazioni introdotte: una nuova implementazione incorporata dell'operazione "map", basata sull'uso di tabelle hash Swiss Table; aumento dell'efficienza dell'uso della memoria per la memorizzazione di oggetti di piccole dimensioni; una nuova implementazione di mutex incorporata nel runtime.
  • È stato aggiunto un meccanismo di tracciamento delle dipendenze eseguibili nel comando "go" per i moduli Go (strumenti ausiliari scritti nel linguaggio Go e utilizzati nello sviluppo del modulo, come i linters o gli strumenti di formattazione del codice). La definizione delle utility nel file go.mod avviene tramite la direttiva "tool", per la quale è stato proposto il comando "go get -tool" per aggiungere l'utility corrente al modulo (ad esempio, "go get -tool golang.org/x/tools/cmd/stringer"). È stato aggiunto il comando "go tool nome_utilità" per eseguire l'utility specificata nella direttiva "tool".
  • È stata aggiunta l'opzione "-json" ai comandi "go build" e "go install" per l'output in formato JSON.
  • È stata aggiunta la variabile d'ambiente GOAUTH per definire i parametri di autenticazione necessari per estrarre moduli a cui si accede con restrizioni.
  • È stato implementato un nuovo analizzatore di test nel comando "go vet" che rileva errori comuni durante l'inclusione di test, strumenti fuzzer, utility di verifica delle prestazioni e esempi di applicazioni.
  • Nella libreria standard sono state incluse implementazioni di algoritmi crittografici approvati secondo lo standard di sicurezza FIPS 140-3.
  • Nel pacchetto testing è stato aggiunto il metodo B.Loop per eseguire test di prestazioni. Utilizzando "for b.Loop() { … }" invece dei normali cicli, è possibile evitare che il compilatore ottimizzi completamente il corpo del ciclo e portare fuori dal ciclo le fasi di impostazione e pulizia del test.
  • È stato aggiunto il tipo os.Root, che consente di isolare le operazioni con il file system in una directory specificata.
  • È stato aggiunto un nuovo meccanismo di finalizzazione runtime.AddCleanup, più flessibile ed efficiente rispetto a runtime.SetFinalizer.
  • È stato aggiunto il pacchetto weak con implementazione di puntatori deboli, che non possiedono l'oggetto, non aumentano il contatore di riferimenti e non ostacolano il rilascio dell'oggetto.
  • Sono stati aggiunti i pacchetti: crypto/mlkem con implementazione degli algoritmi crittografici ML-KEM-768 e ML-KEM-1024 (Kyber), resistenti al reclutamento su computer quantistici; crypto/hkdf con implementazione della funzione di generazione chiave basata su HMAC (RFC 5869); crypto/pbkdf2 con implementazione della funzione di generazione chiave basata su password (PBKDF2, RFC 8018); crypto/sha3 con implementazione degli hash SHA-3.
  • È stato aggiunto un pacchetto sperimentale testing/synctest con funzioni per il test della multithreading.
  • È stato migliorato il supporto per WebAssembly. È stata aggiunta la possibilità di compilare applicazioni Go come libreria o gestore WASI (WebAssembly System Interface). È stata implementata la direttiva go:wasmexport per esportare funzioni per l'uso in WebAssembly.
  • Nell'utility objdump è stata aggiunta la supporto per il disassemblaggio per le architetture LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) e S390X (GOARCH=s390x).

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster