Rilascio del linguaggio di programmazione Go 1.16

Viene presentata la versione del linguaggio di programmazione Go 1.16, sviluppato da Google con la partecipazione della comunità come soluzione ibrida che combina le elevate prestazioni dei linguaggi compilati con i vantaggi dei linguaggi di scripting come la facilità di scrittura del codice , velocità di sviluppo e protezione dagli errori. Il codice del progetto è distribuito sotto la licenza BSD.

La sintassi di Go si basa su elementi familiari del linguaggio C con alcuni prestiti dal linguaggio Python. Il linguaggio è abbastanza conciso, ma il codice è facile da leggere e comprendere. Il codice Go viene compilato in file eseguibili binari autonomi che vengono eseguiti in modo nativo senza utilizzare una macchina virtuale (profilazione, moduli di debug e altri sottosistemi di rilevamento dei problemi di runtime sono integrati come componenti di runtime), il che consente prestazioni paragonabili ai programmi C.

Il progetto è inizialmente sviluppato con un occhio alla programmazione multi-thread e al funzionamento efficiente su sistemi multi-core, inclusa la fornitura di mezzi a livello operatore per organizzare il calcolo parallelo e l'interazione tra metodi eseguiti in parallelo. Il linguaggio fornisce inoltre una protezione integrata contro i blocchi di memoria sovraallocati e offre la possibilità di utilizzare un garbage collector.

Nuove funzionalità principali introdotte in Go 1.16:

  • Aggiunto il pacchetto embed, che fornisce strumenti per incorporare file e directory arbitrari nel programma. Viene fornita una nuova direttiva "//go:embed" per specificare i file da incorporare in fase di compilazione. Ad esempio, specificando "//go:embed test.txt" nel commento del codice e quindi dichiarando la variabile "var f embed.FS" porterà all'incorporamento del file test.txt e alla possibilità di accedervi tramite il " f” descrittore. In modo simile è possibile incorporare file con risorse o singoli valori di un certo tipo necessari per il lavoro, ad esempio per ottenere la variabile stringa “s” dal file versione.txt è possibile specificare: import _ “embed " //go:embed versione.txt var s stringa print(s)
  • Per impostazione predefinita, ora è richiesto il nuovo sistema di moduli con supporto integrato del controllo delle versioni, che sostituisce la gestione delle dipendenze basata su GOPATH. La variabile di ambiente GO111MODULE è ora impostata su "on" per impostazione predefinita e la modalità moduli viene utilizzata indipendentemente dalla presenza di un file go.mod nella directory di lavoro o principale. Nella nuova modalità, i comandi build come "go build" e "go test" non modificano il contenuto di go.mod e go.sum e il comando "go install" elabora gli argomenti della versione ("go install example.com/[email protected]"). Per ripristinare il vecchio comportamento, modificare GO111MODULE in "auto". Si noti che il 96% degli sviluppatori è già passato al nuovo sistema di moduli.
  • Il linker è stato ottimizzato. Per i progetti di grandi dimensioni, il layout è ora più veloce del 20-25% e richiede il 5-15% in meno di memoria.
  • Il compilatore ha aggiunto il supporto per l'espansione in linea delle funzioni con definizioni abbreviate di cicli "for", valori di metodo e costrutti di "cambio di tipo".
  • Aggiunto il supporto per i sistemi Apple dotati del nuovo chip Apple M1 ARM. Aggiunte porte netbsd/arm64 e openbsd/mips64 con supporto per NetBSD su ARM a 64 bit e OpenBSD su sistemi MIPS64. Aggiunto il supporto per cgo e la modalità “-buildmode=pie” al port linux/riscv64.
  • Il supporto per la modalità di compilazione x87 è stato interrotto (GO386=387). Il supporto per i processori senza istruzioni SSE2 è ora disponibile tramite la modalità software "GO386=softfloat".

Inoltre, si segnala l'inizio del test della versione beta del linguaggio Dart 2.12, in cui è stata stabilizzata la modalità sicura per l'utilizzo del valore "Null" (sicurezza nulla), che aiuterà ad evitare crash causati dai tentativi di utilizzare variabili le cui il valore non è definito e impostato su "Null". La modalità implica che le variabili non possono avere valori nulli a meno che non venga loro assegnato esplicitamente il valore null. La modalità rispetta rigorosamente i tipi di variabile, il che consente al compilatore di applicare ottimizzazioni aggiuntive. La conformità al tipo viene verificata in fase di compilazione, ad esempio, se si tenta di assegnare il valore "Null" a una variabile con un tipo che non implica uno stato indefinito, come "int", verrà visualizzato un errore.

Fonte: opennet.ru

Aggiungi un commento