Programmeerimiskeele Go väljalase 1.18

Esitletakse programmeerimiskeele Go 1.18 väljalaset, mida Google arendab kogukonna osalusel hübriidlahendusena, mis ühendab kompileeritud keelte suure jõudluse selliste skriptikeelte eelistega nagu koodi kirjutamise lihtsus , arenduskiirus ja veakaitse. Projekti koodi levitatakse BSD litsentsi all.

Go süntaks põhineb C-keele tuttavatel elementidel, millel on mõned laenud Pythoni keelest. Keel on üsna sisutihe, kuid koodi on lihtne lugeda ja mõista. Go kood kompileeritakse eraldiseisvateks binaarseteks täitmisfailideks, mis töötavad natiivselt ilma virtuaalmasinat kasutamata (profileerimis-, silumismoodulid ja muud käitusaegsete probleemide tuvastamise alamsüsteemid on integreeritud käitusaegsete komponentidena), mis võimaldab C-programmidega võrreldavat jõudlust.

Projekt on algselt välja töötatud, pidades silmas mitme lõimega programmeerimist ja tõhusat töötamist mitmetuumalistes süsteemides, sealhulgas operaatoritaseme vahendite pakkumist paralleelarvutuse korraldamiseks ja paralleelselt täidetavate meetodite vahel. Keel pakub ka sisseehitatud kaitset ülejaotatud mäluplokkide eest ja annab võimaluse kasutada prügikogujat.

Uus versioon lisab tuge üldistele funktsioonidele ja tüüpidele (generics), mille abil saab arendaja defineerida ja kasutada funktsioone, mis on mõeldud töötama mitme tüübiga korraga. Samuti on võimalik liideseid kasutada kombineeritud tüüpide loomiseks, mis hõlmavad mitut andmetüüpi. Geneeriliste ravimite tugi rakendatakse ilma tagasiühilduvust olemasoleva koodiga rikkumata. // Summakomplekti väärtused, töötab tüüpide int64 ja float64 puhul func SumIntsOrFloats[K võrreldav, V int64 | float64](m map[K]V) V { var s V for _, v := vahemik m { s += v } return s } // Teine võimalus üldise tüübidefinitsiooniga: type Number interface { int64 | float64 } func SumNumbrid[K võrreldav, V arv](m kaart[K]V) V { var s V for _, v := vahemik m { s += v } return s }

Muud täiustused:

  • Utiliidid häguse koodi testimiseks on integreeritud standardsesse tööriistakomplekti. Hägutestimise käigus genereeritakse kõigi võimalike sisendandmete juhuslike kombinatsioonide voog ja salvestatakse võimalikud tõrked nende töötlemisel. Kui jada jookseb kokku või ei vasta oodatud vastusele, viitab see käitumine suure tõenäosusega veale või haavatavusele.
  • Lisatud tugi mitmest moodulist koosnevatele tööruumidele, mis võimaldab teil käivitada käske korraga mitmes moodulis, mis võimaldab teil samaaegselt koostada ja käivitada koodi mitmes moodulis.
  • Märkimisväärseid jõudlust on optimeeritud Apple M1, ARM64 ja PowerPC64 protsessoritel põhinevate süsteemide jaoks. Lubatud on võimalus kasutada virna asemel registreid, et edastada funktsioonidele argumente ja tagastada tulemus. Täiustatud silmuste seesmine lahtirullimine kompilaatori poolt. Tüübikontroll kompilaatoris on täielikult ümber kujundatud. Mõned testid näitavad koodi jõudluse 20% tõusu võrreldes eelmise versiooniga, kuid kompileerimine ise võtab aega umbes 15% kauem.
  • Käitusajal on suurendatud vabanenud mälu operatsioonisüsteemi tagastamise efektiivsust ja parandatud prügikorja tööd, mille käitumine on muutunud prognoositavamaks.
  • Standardteeki on lisatud uued paketid net/netip ja debug/buildinfo. TLS 1.0 ja 1.1 tugi on kliendikoodis vaikimisi keelatud. Moodul crypto/x509 on lõpetanud SHA-1 räsi abil allkirjastatud sertifikaatide töötlemise.
  • Linuxi keskkonna nõudeid on tõstetud, töötamiseks peab teil nüüd olema Linuxi kernel vähemalt versiooniga 2.6.32. Järgmises versioonis on sarnaseid muudatusi oodata ka FreeBSD puhul (FreeBSD 11.x haru tugi lõpetatakse) ja töötamiseks on vaja vähemalt FreeBSD 12.2.

Allikas: opennet.ru

Lisa kommentaar