Esitatud on programmeerimiskeele Go 1.16 väljaanne, mida arendab Google koostöös kogukonnaga kui hübriidlahendus, mis ühendab kompileeritavate keelte kõrge jõudluse ja skriptikeelte sellised eelised nagu koodihalduse lihtsus, kiire arendamine ja vigade kaitse. Projekti kood on litsentseeritud BSD litsentsi alusel.
Go süntaks põhineb tuttavatel elementidel C keelest, millel on eraldi laenud Python keelest. Keel on piisavalt lakooniline, kuid samas on kood kergesti loetav ja arusaadav. Go keeles kirjutatud kood kompileeritakse eraldi binaarseteks täidetavateks failideks, mis töötavad natiivselt ilma virtuaalmasina kasutamiseta (profiliseerimise, silumise ja muude probleemide tuvastamise alamsüsteemid integreeritakse runtime-komponentidena), mis võimaldab saavutada jõudluse, mis on võrreldav C keeles kirjutatud programmidega.
Projekt on algselt välja töötatud silmas pidades mitme lõime programmeerimist ja tõhusat töötamist mitme tuumaga süsteemides, pakkudes sealhulgas operaatorite tasemel rakendatud tööriistu paralleelsete arvutuste korraldamiseks ja paralleelselt töötavate meetodite vaheliseks suhtlemiseks. Keel pakub ka sisseehitatud kaitsevahendeid lubamatute mäluplokkide ületamise vastu ja võimaldab kasutusele võtta prügikoristajat.
Go 1.16 väljaandes esitatud peamised uuendused:
- Lisatud on embed-pakett, mis pakub vahendeid failide ja kataloogide programmidesse manustamiseks. Kompileerimise ajal manustatavate failide määramiseks on saadaval uus direktiiv „//go:embed“. Näiteks, kui koodis on kommentaar „//go:embed test.txt“ ja sellele järgneb muutuja kuulutamine „var f embed.FS“, siis manustatakse fail test.txt ja sellele on võimalik juurde pääseda käepideme kaudu „f“. Samamoodi saab manustada vajalikke ressursifaile või kindlat tüüpi eriväärtusi, näiteks Stringi muutuja „s“ hankimiseks failist version.txt saab märkida: import _ "embed" //go:embed version.txt var s string print(s)
- Vaikimisi on nüüd nõutav uue moodulite süsteemi kasutamine, mis sisaldab integreeritud versioonihaldust ja asendab GOPATH põhiseid sõltuvuste haldamise vahendeid. Keskkonnamuutuja GO111MODULE on nüüd vaikimisi seadistatud väärtusele „on“ ja moodulite režiim on aktiivne sõltumata go.mod faili olemasolust töötava või ülemkatalooge. Uues režiimis ei muuda ehitustegevuse käsud, nagu „go build“ ja „go test“, go.mod ja go.sum sisu; käsk „go install“ töötab versiooniargumendiga (näiteks „go install example.com/cmd@v1.0.0“). Vana käitumise taastamiseks tuleb muuta GO111MODULE väärtusele „auto“. Märgitakse, et 96% arendajatest on juba üle läinud uuele moodulite süsteemile.
- Kompilaatorit on optimeeritud. Suurtes projektides toimub kompileerimine nüüd 20-25% kiiremini ja vajab 5-15% vähem mälu.
- Kompilaatorisse on lisatud inline-funktsioonide tugi lühendatud „for“ silmuste, väärtusmeetodite (method values) ja 'type switch' konstruktsioonide määratlemiseks.
- Lisatud on tugi Apple'i uusimate ARM-kiipide M1 süsteemidele. Täiendatud on porti netbsd/arm64 ja openbsd/mips64, mis toetavad NetBSD 64-bitistes ARM süsteemides ja OpenBSD MIPS64 süsteemides. Porti linux/riscv64 on lisatud tugi cgo-le ja režiimile „-buildmode=pie”.
- Kehtivuse lõpetamine x87 kompileerimisrežiimil (GO386=387). Protsessorite tugi, mis ei toeta SSE2 käske, on nüüd saadaval tarkvaralise režiimi „GO386=softfloat” kaudu.
Veelgi tasub märkida, et on alustatud Dart 2.12 keele beetaversiooni testimist, kus on stabiliseeritud väärtuse „Null” (null safety) ohutu kasutamise režiim, mis aitab vältida krahhe, mis on põhjustatud proovimisest kasutada muutujaid, mille väärtus ei ole määratletud ja on seatud „Null”. Režiim eeldab, et muutujaid ei saa kasutada määratlemata väärtustega, kui neile ei antud selgelt väärtust null. Režiimis arvestatakse rangelt muutuja tüüpidega, mis võimaldab kompilatsioonil rakendada täiendavaid optimeerimisi. Tüüpide vastavust kontrollitakse kompileerimise etapis; näiteks, juhul kui proovite määrata väärtust „Null” muutujale, mille tüüp ei toeta määratlemata seisundit, näiteks „int”, antakse viga.
Allikas: opennet.ru
