„Go“ programavimo kalbos išleidimas 1.18

Pristatomas Go 1.18 programavimo kalbos leidimas, kurį „Google“ kuria dalyvaujant bendruomenei kaip hibridinį sprendimą, kuris sujungia aukštą kompiliuotų kalbų našumą su tokiais skriptų kalbų pranašumais kaip kodo rašymo paprastumas. , kūrimo greitis ir apsauga nuo klaidų. Projekto kodas platinamas pagal BSD licenciją.

„Go“ sintaksė pagrįsta pažįstamais C kalbos elementais su kai kuriomis „Python“ kalbos skolinėmis. Kalba gana glausta, tačiau kodą lengva skaityti ir suprasti. „Go“ kodas yra sukompiliuotas į atskirus dvejetainius vykdomuosius failus, kurie veikia natūraliai, nenaudojant virtualios mašinos (profiliavimo, derinimo moduliai ir kiti vykdymo laiko problemų aptikimo posistemiai yra integruoti kaip vykdymo laiko komponentai), todėl našumas yra panašus į C programas.

Iš pradžių projektas buvo sukurtas atsižvelgiant į kelių gijų programavimą ir efektyvų daugelio branduolių sistemų veikimą, įskaitant operatoriaus lygio priemones, skirtas organizuoti lygiagretųjį skaičiavimą ir lygiagrečiai vykdomų metodų sąveiką. Kalba taip pat suteikia įmontuotą apsaugą nuo per daug paskirstytų atminties blokų ir suteikia galimybę naudoti šiukšlių rinktuvą.

Naujoji versija papildo bendrųjų funkcijų ir tipų (bendrinių) palaikymą, kurio pagalba kūrėjas gali apibrėžti ir naudoti funkcijas, skirtas dirbti su keliais tipais vienu metu. Taip pat galima naudoti sąsajas kuriant kombinuotus tipus, apimančius kelis duomenų tipus. Bendrųjų vaistų palaikymas įgyvendinamas nepažeidžiant atgalinio suderinamumo su esamu kodu. // Sumų rinkinių reikšmės, veikia int64 ir float64 tipams func SumIntsOrFloats[K palyginamas, V int64 | float64](m map[K]V) V { var s V for _, v := diapazonas m { s += v } return s } // Kitas variantas su bendru tipo apibrėžimu: type Skaičių sąsaja { int64 | float64 } func SumNumbers[K palyginamas, V skaičius](m žemėlapis[K]V) V { var s V for _, v := diapazonas m { s += v } return s }

Kiti patobulinimai:

  • Sumaišyto kodo testavimo priemonės yra integruotos į standartinį įrankių rinkinį. Atliekant fuzzing testavimą, generuojamas visų galimų atsitiktinių įvesties duomenų derinių srautas ir registruojami galimi gedimai jų apdorojimo metu. Jei seka užstringa arba neatitinka laukiamo atsako, tai labai tikėtina, kad tai rodo klaidą arba pažeidžiamumą.
  • Pridėtas kelių modulinių darbo sričių palaikymas, leidžiantis vienu metu vykdyti komandas keliuose moduliuose, leidžiant vienu metu kurti ir paleisti kodą keliuose moduliuose.
  • Sistemoms, pagrįstoms Apple M1, ARM64 ir PowerPC64 procesoriais, buvo atliktas reikšmingas našumo optimizavimas. Įgalinta galimybė naudoti registrus, o ne krūvą, norint perduoti argumentus funkcijoms ir grąžinti rezultatą. Patobulintas kompiliatoriaus vidinis kilpų išvyniojimas. Tipo tikrinimas kompiliatoriuje buvo visiškai pertvarkytas. Kai kurie testai rodo, kad kodo našumas padidėjo 20 %, palyginti su ankstesne versija, tačiau pats kompiliavimas užtrunka apie 15 % ilgiau.
  • Vykdymo metu buvo padidintas atlaisvintos atminties grąžinimo operacinei sistemai efektyvumas ir patobulintas šiukšlių rinktuvo veikimas, kurio elgsena tapo labiau nuspėjama.
  • Į standartinę biblioteką buvo įtraukti nauji paketai „net/netip“ ir „debug/buildinfo“. Pagal numatytuosius nustatymus kliento kode TLS 1.0 ir 1.1 palaikymas išjungtas. „Crypto/x509“ modulis nustojo apdoroti sertifikatus, pasirašytus naudojant SHA-1 maišą.
  • Aplinkos reikalavimai Linux sistemoje buvo pakelti, dabar reikia turėti bent 2.6.32 versijos Linux branduolį. Kitoje laidoje panašių pakeitimų tikimasi ir FreeBSD (FreeBSD 11.x šakos palaikymas bus nutrauktas), o kad veiktų, reikės bent jau FreeBSD 12.2.

Šaltinis: opennet.ru

Pirkite patikimą prieglobą svetainėms su DDoS apsauga, VPS VDS serveriais 🔥 Įsigykite patikimą svetainių talpinimą su DDoS apsauga, VPS VDS serveriais | ProHoster