Izdaja programskega jezika Go 1.18

Predstavljena je izdaja programskega jezika Go 1.18, ki ga Google razvija s sodelovanjem skupnosti kot hibridno rešitev, ki združuje visoko zmogljivost prevedenih jezikov s prednostmi skriptnih jezikov, kot je enostavnost pisanja kode. , hitrost razvoja in zaščita pred napakami. Koda projekta se distribuira pod licenco BSD.

Sintaksa programa Go temelji na znanih elementih jezika C z nekaterimi izposojami iz jezika Python. Jezik je precej jedrnat, vendar je koda lahko berljiva in razumljiva. Koda Go je prevedena v samostojne binarne izvedljive datoteke, ki se izvajajo izvorno brez uporabe virtualnega stroja (moduli za profiliranje, odpravljanje napak in drugi podsistemi za odkrivanje težav med izvajanjem so integrirani kot komponente izvajalnega okolja), kar omogoča zmogljivost, primerljivo s programi C.

Projekt je bil prvotno razvit z mislijo na večnitno programiranje in učinkovito delovanje na večjedrnih sistemih, vključno z zagotavljanjem sredstev na ravni operaterja za organiziranje vzporednega računalništva in interakcije med vzporedno izvedenimi metodami. Jezik ponuja tudi vgrajeno zaščito pred preveč dodeljenimi bloki pomnilnika in omogoča uporabo zbiralnika smeti.

Nova različica dodaja podporo za generične funkcije in tipe (generike), s pomočjo katerih lahko razvijalec definira in uporablja funkcije, zasnovane za delo z več tipi hkrati. Prav tako je mogoče uporabiti vmesnike za ustvarjanje kombiniranih tipov, ki zajemajo več tipov podatkov. Podpora za generike je implementirana brez prekinitve združljivosti za nazaj z obstoječo kodo. // Nastavljene vrednosti vsote, deluje za tipa int64 in float64 func SumIntsOrFloats[K primerljivo, V int64 | float64](m map[K]V) V { var s V for _, v := obseg m { s += v } return s } // Druga možnost z generično definicijo tipa: type Number interface { int64 | float64 } func SumNumbers[K primerljivo, V število](m preslikava[K]V) V { var s V za _, v := obseg m { s += v } vrni s }

Druge izboljšave:

  • Pripomočki za testiranje kode fuzzing so integrirani v standardni komplet orodij. Pri fuzzing testiranju se ustvari tok vseh možnih naključnih kombinacij vhodnih podatkov in zabeležijo morebitne napake pri njihovi obdelavi. Če se zaporedje zruši ali se ne ujema s pričakovanim odzivom, je zelo verjetno, da to vedenje kaže na napako ali ranljivost.
  • Dodana podpora za večmodularne delovne prostore, ki vam omogoča izvajanje ukazov na več modulih hkrati, kar vam omogoča sočasno gradnjo in izvajanje kode v več modulih.
  • Za sisteme, ki temeljijo na procesorjih Apple M1, ARM64 in PowerPC64, so bile narejene pomembne optimizacije delovanja. Omogočena možnost uporabe registrov namesto sklada za posredovanje argumentov funkcijam in vrnitev rezultata. Izboljšano vgrajeno odvijanje zank s strani prevajalnika. Preverjanje tipa v prevajalniku je bilo popolnoma preoblikovano. Nekateri testi kažejo 20-odstotno povečanje zmogljivosti kode v primerjavi s prejšnjo izdajo, vendar samo prevajanje traja približno 15 % dlje.
  • Med izvajanjem je bila povečana učinkovitost vračanja sproščenega pomnilnika v operacijski sistem in izboljšano je bilo delovanje zbiralnika smeti, katerega obnašanje je postalo bolj predvidljivo.
  • V standardno knjižnico sta bila dodana nova paketa net/netip in debug/buildinfo. Podpora za TLS 1.0 in 1.1 je privzeto onemogočena v kodi odjemalca. Modul crypto/x509 je prenehal obdelovati potrdila, podpisana z zgoščevanjem SHA-1.
  • Zahteve za okolje v Linuxu so bile povišane; za delovanje morate zdaj imeti jedro Linuxa vsaj različice 2.6.32. V naslednji izdaji se pričakujejo podobne spremembe za FreeBSD (podpora za vejo FreeBSD 11.x bo ukinjena) in za delovanje bo potreben vsaj FreeBSD 12.2.

Vir: opennet.ru

Dodaj komentar