Esittelyssä on Go 1.18 -ohjelmointikielen julkaisu, jota Google kehittää yhteisön mukana hybridiratkaisuna, joka yhdistää käännettyjen kielten korkean suorituskyvyn sellaisiin komentosarjakielten etuihin kuin koodin kirjoittamisen helppous. , kehitysnopeus ja virhesuojaus. Projektikoodia jaetaan BSD-lisenssillä.
Go:n syntaksi perustuu tuttuihin C-kielen elementteihin, joissa on lainauksia Python-kielestä. Kieli on melko ytimekäs, mutta koodi on helppo lukea ja ymmärtää. Go-koodi on käännetty erillisiksi binäärisiksi suoritettaviksi tiedostoiksi, jotka toimivat natiivisti ilman virtuaalikoneen käyttöä (profilointi-, virheenkorjausmoduulit ja muut ajonaikaisten ongelmien havaitsemisalijärjestelmät on integroitu ajonaikaisiksi komponenteiksi), mikä mahdollistaa C-ohjelmiin verrattavan suorituskyvyn.
Projektia kehitetään alun perin silmällä pitäen monisäikeistä ohjelmointia ja tehokasta toimintaa moniytimisissä järjestelmissä, mukaan lukien operaattoritason välineet rinnakkaisen laskennan ja rinnakkaisten menetelmien välisen vuorovaikutuksen järjestämiseen. Kieli tarjoaa myös sisäänrakennetun suojan yliallokoituja muistilohkoja vastaan ja mahdollistaa roskienkeräimen käytön.
Uusi versio lisää tuen yleisille funktioille ja tyypeille, jolloin kehittäjä voi määritellä ja käyttää funktioita, jotka toimivat useiden tyyppien kanssa. Se tarjoaa myös mahdollisuuden käyttää rajapintoja yhdistettyjen tyyppien luomiseen, jotka kattavat useita tietotyyppejä. Yleisiä tyyppejä tuetaan rikkomatta yhteensopivuutta olemassa olevan koodin kanssa. // Yhteenveto asetettujen arvojen kanssa, toimii sekä int64- että float64-tyypeillä func SumIntsOrFloats[K compatible, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Toinen vaihtoehto yleisellä tyyppimäärittelyllä: type Number interface { int64 | float64 } func SumNumbers[K compatible, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }
Muita parannuksia:
- Vakiotyökalupakki sisältää integroidut apuohjelmat koodin fuzz-analyysiin. Fuzz-testaus sisältää kaikkien mahdollisten satunnaisten syöteyhdistelmien virran luomisen ja mahdollisten virheiden tallentamisen niiden käsittelyn aikana. Jos jokin sekvenssi johtaa kaatumiseen tai ei vastaa odotettua vastetta, tämä toiminta viittaa erittäin todennäköisesti virheeseen tai haavoittuvuuteen.
- Lisätty tuki usean moduulin työtiloille, joiden avulla voit suorittaa komentoja useissa moduuleissa samanaikaisesti, jolloin voit rakentaa ja suorittaa koodia useissa moduuleissa samanaikaisesti.
- Merkittäviä suorituskyvyn optimointeja on toteutettu Apple M1-, ARM64- ja PowerPC64-prosessoreihin perustuvissa järjestelmissä. Mahdollisuus käyttää rekistereitä pinon sijaan argumenttien välittämiseen funktioille ja tulosten palauttamiseen on otettu käyttöön. Kääntäjän suorittamaa inline-silmukan purkamista on parannettu. Kääntäjän tyyppitarkistus on suunniteltu kokonaan uudelleen. Jotkut testit osoittavat 20 %:n suorituskyvyn parannuksen edelliseen julkaisuun verrattuna, mutta itse kääntäminen kestää nyt noin 15 % kauemmin.
- Ajonaikana vapautetun muistin palauttamisen tehokkuutta käyttöjärjestelmään on lisätty ja roskienkerääjää on parannettu, mikä tekee sen toiminnasta ennustettavampaa.
- Uudet paketit net/netip ja debug/buildinfo on lisätty standardikirjastoon. TLS 1.0- ja 1.1-tuki on oletusarvoisesti poistettu käytöstä asiakaskoodissa. crypto/x509-moduuli ei enää käsittele SHA-1-hajautusalgoritmilla allekirjoitettuja varmenteita.
- Linux-ympäristön vaatimuksia on nostettu, ja nyt vaaditaan vähintään Linux-ytimen versio 2.6.32. Samanlaisia muutoksia odotetaan FreeBSD:lle seuraavassa julkaisussa (FreeBSD 11.x -haaran tuki lopetetaan), ja toiminta edellyttää FreeBSD 12.2:ta.
Lähde: opennet.ru
