Go-ohjelmointikielen julkaisu 1.18

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 geneerisille funktioille ja tyypeille (generics), joiden avulla kehittäjä voi määritellä ja käyttää toimintoja, jotka on suunniteltu toimimaan useiden tyyppien kanssa samanaikaisesti. On myös mahdollista käyttää rajapintoja luodaksesi yhdistettyjä tyyppejä, jotka kattavat useita tietotyyppejä. Geneeristen tuotteiden tuki toteutetaan rikkomatta taaksepäin yhteensopivuutta olemassa olevan koodin kanssa. // Summajoukkoarvot, toimii int64- ja float64-tyypeillä func SumIntsOrFloats[K vertailukelpoinen, V int64 | float64](m map[K]V) V { var s V for _, v := alue m { s += v } return s } // Toinen vaihtoehto yleisellä tyyppimääritelmällä: type Number interface { int64 | float64 } func SumNumbers[K vertailukelpoinen, V-luku](m kartta[K]V) V { var s V for _, v := alue m { s += v } return s }

Muita parannuksia:

  • Sumeakooditestauksen apuohjelmat on integroitu vakiotyökalupakettiin. Fuzzing-testauksen aikana generoidaan virta kaikista mahdollisista satunnaisista tulodatan yhdistelmistä ja kirjataan mahdolliset viat niiden käsittelyn aikana. Jos sekvenssi kaatuu tai ei vastaa odotettua vastausta, tämä toiminta on erittäin todennäköisesti merkki viasta tai haavoittuvuudesta.
  • Lisätty tuki monimodulaarisille työtiloille, jolloin voit suorittaa komentoja useissa moduuleissa samanaikaisesti, jolloin voit samanaikaisesti rakentaa ja suorittaa koodia useissa moduuleissa.
  • Apple M1-, ARM64- ja PowerPC64-prosessoreihin perustuville järjestelmille on tehty merkittäviä suoritusoptimointeja. Otettiin käyttöön mahdollisuus käyttää rekistereitä pinon sijaan argumenttien välittämiseen funktioille ja tuloksen palauttamiseen. Kääntäjän parannettu inline-silmukoiden purkaminen. Kääntäjän tyyppitarkistus on suunniteltu kokonaan uudelleen. Jotkut testit osoittavat 20 % paremman koodin suorituskyvyn edelliseen julkaisuun verrattuna, mutta itse kääntäminen kestää noin 15 % kauemmin.
  • Ajon aikana vapautuneen muistin palauttamisen tehokkuutta käyttöjärjestelmään on lisätty ja roskakeräimen toimintaa on parannettu, jonka käyttäytyminen on tullut ennakoitavammaksi.
  • Uudet paketit net/netip ja debug/buildinfo on lisätty vakiokirjastoon. TLS 1.0:n ja 1.1:n tuki on oletusarvoisesti poistettu käytöstä asiakaskoodissa. crypto/x509-moduuli on lopettanut SHA-1-tiivisteellä allekirjoitettujen varmenteiden käsittelyn.
  • Linux-ympäristön vaatimuksia on nostettu, toimiaksesi tarvitset nyt vähintään Linux-ytimen version 2.6.32. Seuraavassa julkaisussa samanlaisia ​​muutoksia odotetaan myös FreeBSD:lle (FreeBSD 11.x:n tuki lopetetaan) ja vähintään FreeBSD 12.2 vaaditaan toimimaan.

Lähde: opennet.ru

Lisää kommentti