Uscita del linguaggio di programmazione Go 1.18

È stato rilasciato il linguaggio di programmazione Go 1.18, sviluppato da Google con la collaborazione della comunità, come soluzione ibrida che combina l'alta prestazione dei linguaggi compilati con i vantaggi dei linguaggi di scripting, come la facilità di scrittura del codice, la rapidità di sviluppo e la protezione dagli errori. Il codice del progetto è distribuito con 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 in Go viene compilato in file eseguibili binari autonomi, eseguiti nativamente senza l'uso di una macchina virtuale (i moduli di profilazione, debugging e altri sottosistemi di rilevamento problemi sono integrati come componenti runtime), permettendo così di raggiungere prestazioni paragonabili a quelle dei programmi in C.

Il progetto è stato inizialmente sviluppato tenendo conto della programmazione multithreading e dell'efficiente utilizzo di sistemi multicore, fornendo anche strumenti implementati a livello di operatore per organizzare calcoli paralleli e interazioni tra metodi eseguiti in parallelo. Il linguaggio offre anche strumenti integrati per proteggere dalla fuga di memoria e garantisce la possibilità di utilizzare un garbage collector.

Nella nuova versione è stata aggiunta la supporto per le funzioni e i tipi generici, grazie ai quali gli sviluppatori possono definire e utilizzare funzioni progettate per lavorare con più tipi contemporaneamente. È anche possibile utilizzare interfacce per creare tipi combinati che coprono diversi tipi di dati. Il supporto per i generici è stato implementato senza compromettere la retrocompatibilità con il codice esistente. // Somma dei valori di un insieme, funzionante per i tipi int64 e float64 func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Un'altra variante con definizione generica di tipo: type Number interface { int64 | float64 } func SumNumbers[K comparable, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }

Altri miglioramenti:

  • Nel toolkit standard sono integrate utility per il fuzzing del codice. Durante il fuzzing, viene generato un flusso di varie combinazioni casuali di dati in input e viene registrato eventuali guasti nel loro trattamento. Se una sequenza provoca un crash o non corrisponde alla risposta attesa, tale comportamento indica con alta probabilità un errore o una vulnerabilità.
  • È stato aggiunto il supporto per spazi di lavoro modulari, che consentono di eseguire comandi contemporaneamente su più moduli, permettendo di compilare ed eseguire il codice in più moduli simultaneamente.
  • Significativa ottimizzazione delle prestazioni per sistemi basati su processori Apple M1, ARM64 e PowerPC64. È stata inclusa la possibilità di utilizzare i registri anziché lo stack per passare argomenti alle funzioni e restituire risultati. Il compilatore ha migliorato l'espansione inline dei cicli. Il controllo dei tipi nel compilatore è stato completamente riprogettato. In alcuni test rispetto alla versione precedente, si è registrato un aumento delle prestazioni del codice del 20%, anche se la compilazione stessa richiede circa il 15% di tempo in più.
  • Nella runtime è stata migliorata l'efficienza del restituire la memoria liberata al sistema operativo e il funzionamento del garbage collector è diventato più prevedibile.
  • Nella libreria standard sono stati aggiunti nuovi pacchetti net/netip e debug/buildinfo. Nel codice client, il supporto per TLS 1.0 e 1.1 è disabilitato di default. Nel modulo crypto/x509 è stata interrotta l'elaborazione dei certificati con firma basata su hash SHA-1.
  • Sono stati elevati i requisiti per l'ambiente in Linux; ora è necessario disporre almeno del kernel Linux versione 2.6.32. Nella prossima versione ci si aspetta che cambiamenti simili avvengano per FreeBSD (il supporto per la ramificazione FreeBSD 11.x sarà interrotto) e per funzionare sarà necessaria almeno FreeBSD 12.2.

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