Rilascio del linguaggio di programmazione Go 1.13

Introdotto rilascio del linguaggio di programmazione Andare 1.13, che viene sviluppato da Google con la partecipazione della community come soluzione ibrida che combina le elevate prestazioni dei linguaggi compilati con i vantaggi dei linguaggi di scripting come facilità di scrittura del codice, velocità di sviluppo e protezione dagli errori. Codice del progetto distribuito da sotto 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 è compilato in eseguibili binari autonomi che vengono eseguiti in modo nativo senza utilizzare una macchina virtuale (profilazione, debug e altri sottosistemi di rilevamento dei problemi di runtime sono integrati come componenti di esecuzione), che consente di ottenere 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.

Il principale innovazioniintrodotto nella versione Go 1.13:

  • Il pacchetto crypto/tls ha il supporto del protocollo abilitato per impostazione predefinita TLS 1.3. Aggiunto nuovo pacchetto "crypto/ed25519" con supporto per firme digitali Ed25519;
  • Aggiunto il supporto per nuovi prefissi numerici letterali per definire numeri binari (ad esempio 0b101), ottali (0o377), immaginari (2.71828i) ed esadecimali in virgola mobile (0x1p-1021) e la possibilità di utilizzare il carattere "_" per separare visivamente le cifre in gran numero (1_000_000);
  • È stata rimossa la restrizione all'utilizzo dei soli contatori senza segno nelle operazioni di turno, evitando così inutili conversioni al tipo uint prima di utilizzare gli operatori “‹‹” e “››”;
  • Aggiunto il supporto per la piattaforma Illumos (GOOS=illumos). È stata garantita la compatibilità con la piattaforma Android 10. Sono stati aumentati i requisiti per le versioni minime di FreeBSD (11.2) e macOS (10.11 “El Capitan”).
  • Sviluppo continuo del nuovo sistema di moduli che può essere utilizzato come alternativa a GOPATH. Contrariamente ai piani precedentemente annunciati in Go 1.13, questo sistema non è abilitato per impostazione predefinita e richiede l'attivazione tramite la variabile GO111MODULE=on o l'utilizzo di un contesto in cui i moduli vengono applicati automaticamente. Il nuovo sistema di moduli offre supporto integrato per il controllo delle versioni, funzionalità di consegna dei pacchetti e una migliore gestione delle dipendenze. Con i moduli, gli sviluppatori non sono più vincolati a lavorare all'interno di un albero GOPATH, possono definire esplicitamente dipendenze con versione e creare build ripetibili.

    A differenza delle versioni precedenti, l'applicazione automatica del nuovo sistema ora funziona quando un file go.mod è presente nella directory di lavoro corrente o nella directory principale durante l'esecuzione del comando go, incluso quando si trova nella directory GOPATH/src. Sono state aggiunte nuove variabili d'ambiente: GOPRIVATE, che definisce i percorsi dei moduli accessibili pubblicamente, e GOSUMDB, che specifica i parametri di accesso al database di checksum per i moduli non elencati nel file go.sum;

  • Il comando "go" per impostazione predefinita carica i moduli e ne verifica l'integrità utilizzando il mirror dei moduli e il database di checksum gestito da Google (proxy.golang.org, sum.golang.org e index.golang.org);
  • Il supporto solo per i pacchetti binari è stato interrotto; la creazione di un pacchetto in modalità "//go:binary-only-package" ora genera un errore;
  • Aggiunto il supporto per il suffisso "@patch" al comando "go get", indicando che il modulo deve essere aggiornato all'ultima release di manutenzione, ma senza modificare la versione major o minor corrente;
  • Quando si recuperano moduli dai sistemi di controllo del codice sorgente, il comando "go" ora esegue un controllo aggiuntivo sulla stringa della versione, tentando di far corrispondere i numeri di pseudo-versione con i metadati dal repository;
  • Aggiunto supporto controllo degli errori (error wrapper) attraverso la creazione di wrapper che consentono l'utilizzo di gestori di errori standard. Per esempio, Errore di "e" può essere aggirato attorno all'errore "w" fornendo un metodo Scartare, restituendo "w". Entrambi gli errori "e" e "w" sono disponibili nel programma e le decisioni vengono prese in base all'errore "w", ma "e" fornisce contesto aggiuntivo a "w" o lo interpreta in modo diverso;
  • Le prestazioni dei componenti runtime sono state ottimizzate (è stato notato un aumento di velocità fino al 30%) ed è stata implementata una restituzione più aggressiva della memoria al sistema operativo (in precedenza, la memoria veniva restituita dopo cinque o più minuti, ma ora immediatamente dopo aver ridotto la dimensione dell'heap).

Fonte: opennet.ru

Aggiungi un commento