Siirry ohjelmointikielen julkaisuun 1.16

Esittelyssä on Go 1.16 -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.

Go 1.16:n tärkeimmät uudet ominaisuudet:

  • Lisätty upotuspaketti, joka tarjoaa työkalut mielivaltaisten tiedostojen ja hakemistojen upottamiseen ohjelmaan. Uusi "//go:embed" -ohje on annettu määrittämään käännösvaiheessa upotettavat tiedostot. Esimerkiksi "//go:embed test.txt" määrittäminen koodin kommentissa ja muuttujan "var f embed.FS" ilmoittaminen johtaa test.txt-tiedoston upottamiseen ja mahdollisuuteen käyttää sitä " f” kuvaaja. Samalla tavalla voit upottaa tiedostoja, joissa on tietyn tyyppisiä resursseja tai yksittäisiä arvoja, joita tarvitaan työhön, esimerkiksi saadaksesi merkkijonomuuttujan “s” version.txt-tiedostosta, voit määrittää: import _ “embed ” //go:embed version.txt var s string print (s)
  • Oletusarvoisesti tarvitaan nyt uusi moduulijärjestelmä integroidulla versiointituella, joka korvaa GOPATH-pohjaisen riippuvuuden hallinnan. GO111MODULE-ympäristömuuttuja on nyt oletuksena "on" ja moduulit-tilaa käytetään riippumatta siitä, onko työ- tai ylähakemistossa go.mod-tiedosto. Uudessa tilassa koontikomennot, kuten "go build" ja "go test" eivät muuta tiedostojen go.mod ja go.sum sisältöä, ja "go install" -komento käsittelee versioargumentteja ("go install example.com/[sähköposti suojattu]"). Voit palauttaa vanhan toiminnan muuttamalla GO111MODULE:ksi "auto". On huomattava, että 96% kehittäjistä on jo siirtynyt uuteen moduulijärjestelmään.
  • Linkkeri on optimoitu. Suurissa projekteissa asettelu on nyt 20–25 % nopeampi ja vaatii 5–15 % vähemmän muistia.
  • Kääntäjä on lisännyt tuen toimintojen sisäistä laajentamista varten lyhennetyillä "for"-silmukoiden, menetelmäarvojen ja "tyyppikytkin"-rakenteiden määritelmillä.
  • Lisätty tuki Applen järjestelmille, jotka on varustettu uudella Apple M1 ARM -sirulla. Lisätty netbsd/arm64- ja openbsd/mips64-portit, jotka tukevat NetBSD:tä 64-bittisessä ARM-järjestelmässä ja OpenBSD:tä MIPS64-järjestelmissä. Lisätty tuki cgo:lle ja "-buildmode=pie" -tilalle linux/riscv64-porttiin.
  • x87-käännöstilan tuki on lopetettu (GO386=387). Ohjeettomien SSE2-suorittimien tuki on nyt saatavilla "GO386=softfloat"-ohjelmistotilan kautta.

Lisäksi voidaan todeta, että Dart 2.12 -kielen beta-version testaus on alkanut, jossa "Null"-arvon käytön turvatila (null-turvallisuus) on vakiintunut, mikä auttaa välttämään kaatumisia, jotka aiheutuvat yrityksistä käyttää muuttujia, joiden muuttujat arvo on määrittelemätön ja asetettu arvoon "Null". Tila tarkoittaa, että muuttujilla ei voi olla nolla-arvoja, ellei niille ole nimenomaisesti määritetty arvoa null. Tila kunnioittaa tiukasti muuttujatyyppejä, mikä antaa kääntäjälle mahdollisuuden käyttää lisäoptimointeja. Tyyppiyhteensopivuus tarkistetaan käännösvaiheessa, jos esimerkiksi yrität antaa arvon "Null" muuttujalle, jonka tyyppi ei tarkoita määrittelemätöntä tilaa, kuten "int", näyttöön tulee virheilmoitus.

Lähde: opennet.ru

Lisää kommentti