Rilascio del linguaggio di programmazione Go 1.14

Introdotto rilascio del linguaggio di programmazione Andare 1.14, 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.14:

  • Il nuovo sistema di moduli nel comando "go" è dichiarato pronto per l'uso generale, abilitato per impostazione predefinita e consigliato per la gestione delle dipendenze invece di GOPATH. 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.
  • Aggiunto da supporto per incorporare interfacce con un insieme di metodi sovrapposti. I metodi di un'interfaccia integrata ora possono avere gli stessi nomi e firme dei metodi nelle interfacce esistenti. I metodi dichiarati esplicitamente rimangono unici come prima.
  • Le prestazioni dell'espressione "defer" sono state migliorate, rendendola veloce quasi quanto la chiamata diretta di una funzione rinviata, consentendo l'esecuzione posticipata della funzione nel codice sensibile alle prestazioni.
  • Viene fornita la prelazione asincrona delle coroutine (goroutine): i cicli che non contengono chiamate di funzione ora possono potenzialmente portare a un deadlock dello scheduler o ritardare l'inizio della garbage collection.
  • L'efficienza del sistema di allocazione delle pagine di memoria è stata migliorata e ora sono presenti molti meno conflitti di blocco nelle configurazioni con valori GOMAXPROCS grandi. Il risultato è una latenza ridotta e un aumento del throughput, distribuendo contemporaneamente in modo intensivo grandi blocchi di memoria.
  • Il blocco è stato ottimizzato e il numero di cambi di contesto è stato ridotto durante l'esecuzione dei timer interni utilizzati nelle funzioni time.After, time.Tick, net.Conn.SetDeadline.
  • Nel comando go, il flag "-mod=vendor" è abilitato per impostazione predefinita se nella root è presente una directory del fornitore, destinata a fornire dipendenze esterne legate a un fornitore specifico. Aggiunto un flag separato "-mod=mod" per caricare i moduli dalla cache dei moduli anziché dalla directory "vendor". Se il file go.mod è di sola lettura, il flag "-mod=readonly" è impostato per impostazione predefinita se non esiste una directory "vendor" principale. Aggiunto il flag "-modfile=file" per specificare un file go.mod alternativo invece di quello nella directory root del modulo.
  • Aggiunta la variabile d'ambiente GOINSECURE, quando impostato, il comando go non richiede l'utilizzo di HTTPS e salta il controllo del certificato durante il caricamento diretto dei moduli.
  • Il compilatore ha aggiunto il flag “-d=checkptr”, abilitato di default, per verificare la conformità del codice alle regole per l'uso sicuro di unsafe.Pointer.
  • Nella consegna è incluso un nuovo pacco hash/maphash con funzioni hash non crittografiche per creare tabelle hash per sequenze o stringhe di byte arbitrarie.
  • Aggiunto il supporto sperimentale per la piattaforma RISC-V a 64 bit su Linux.
  • Aggiunto il supporto per FreeBSD su sistemi ARM a 64 bit.

Fonte: opennet.ru

Aggiungi un commento