Dopu à sei mesi di sviluppu, a lingua di prugrammazione Go, sviluppata da Google cù a participazione di a cumunità, hè stata liberata cum'è a versione 1.26. A lingua combina l'alta prestazione di e lingue compilate cù i vantaghji di e lingue di scrittura cum'è facilità di scrittura di codice, alta velocità di sviluppu è prutezzione di errore. U codice di u prugettu hè distribuitu sottu a licenza BSD.
A sintassi di Go hè basatu annantu à elementi familiari di a lingua C cù qualchi prestiti da a lingua Oberon. A lingua hè abbastanza cuncisa, ma u codice hè faciule da leghje è capisce. U codice Go hè compilatu in file eseguibili binari separati chì funzionanu in modu nativu, senza l'usu di una macchina virtuale (profilazione, moduli di debugging è altri sottosistemi di rilevazione di prublemi di runtime sò integrati cum'è cumpunenti di runtime), chì permette un rendiment paragunabile à i prugrammi C.
U prugettu hè inizialmente sviluppatu cù un ochju à a prugrammazione multithreaded è u funziunamentu efficiente in sistemi multi-core. Per esempiu, à u livellu di l'operatore, i strumenti sò implementati per urganizà computazioni parallele è interazzione trà metudi paralleli. A lingua furnisce ancu una prutezzione integrata di buffer overrun è capacità di raccolta di basura.
Trà i cambiamenti in a nova versione:
- U raccoglitore di rifiuti "greenteagc", cuncipitu per migliurà e prestazioni di creazione è scansione di picculi oggetti, hè attivatu per difettu. L'applicazioni chì utilizanu assai a raccolta di rifiuti anu vistu una riduzione di u 10-40% in u sovraccaricu di raccolta di rifiuti quandu utilizanu "greenteagc".
- A funzione new() integrata, cuncipita per creà nuove variabili, permette avà di specificà una espressione cum'è operandu chì determina u valore iniziale di a variabile. Per esempiu, invece di u codice x := int64(300) ptr := &x , pudete avà scrive: ptr := new(int64(300))
- I tipi generici sò autorizati à riferisce si stessi cum'è un argumentu in a lista di parametri di u tipu (pudete passà un tipu à u so propiu parametru). In a prima linea di l'esempiu quì sottu, u riferimentu di Adder à sè stessu ùn produce più un errore: type Adder[A Adder[A]] interface { Add(A) A } func algo[A Adder[A]](x, y A) A { return x.Add(y) }
- U sovraccaricu di chjamà e funzioni C da u codice Go cù cgo hè riduttu di circa u 30%.
- U runtime nantu à e piattaforme 64-bit implementa a randomizazione di u spaziu d'indirizzu à l'avviu, ciò chì complica a previsione di l'indirizzu di memoria quandu si prova à sfruttà e vulnerabilità in u codice C accessu via cgo. L'opzione "GOEXPERIMENT=norandomizedheapbase64" hè dispunibule per disattivà a randomizazione.
- U numeru di situazioni in quale u compilatore alloca memoria per e fette nantu à a pila invece di nantu à u heap hè statu allargatu, ciò chì hà un effettu pusitivu nantu à e prestazioni.
- U cumandamentu "go fix" hè statu cumpletamente riscrittu aduprendu u pacchettu d'analisi, chì furnisce funzionalità d'analisi statistica di u codice. Hè statu aghjuntu u supportu per l'analizatori dispunibili in u pacchettu di mudernizazione, chì suggerenu simplificazioni di codice basate nantu à u novu linguaghju è e funzionalità standard di a biblioteca. Un analizzatore "inline" hè statu aghjuntu per l'espansione inline di tutte e chjame di funzione marcate cù a direttiva "//go:fix inline".
- Novi pacchetti crypto/hpke (HPKE — Implementazione di a crittografia à chjave publica ibrida), crypto/mlkem/mlkemtest è testing/cryptotest sò stati aghjunti.
- Aghjuntu u pacchettu sperimentale simd/archsimd, chì furnisce accessu à bassu livellu per eseguisce operazioni vettoriali utilizendu istruzioni SIMD nantu à i sistemi AMD64.
- Aghjuntu u pacchettu sperimentale runtime/secret per svuotà (azzerà) in modu sicuru a memoria tempuranea allocata durante l'esecuzione di a funzione specificata.
- Un prufilu sperimentale, goroutineleak, hè statu aghjuntu à u pacchettu runtime/pprof per rilevà e fughe di goroutine.
Source: opennet.ru
