Izdanje programskog jezika Go 1.18

Predstavljeno je izdanje programskog jezika Go 1.18, koji razvija Google uz sudjelovanje zajednice kao hibridno rješenje koje kombinira visoke performanse kompiliranih jezika s prednostima skriptnih jezika kao što je lakoća pisanja koda , brzina razvoja i zaštita od pogrešaka. Kod projekta se distribuira pod BSD licencom.

Sintaksa Go-a temelji se na poznatim elementima jezika C s nekim posuđenicama iz jezika Python. Jezik je prilično koncizan, ali je kod lako čitljiv i razumljiv. Go kod je kompajliran u samostalne binarne izvršne datoteke koje se izvode izvorno bez korištenja virtualnog stroja (moduli za profiliranje, otklanjanje pogrešaka i drugi podsustavi za otkrivanje problema tijekom izvođenja integrirani su kao komponente za izvođenje), što omogućuje performanse usporedive s C programima.

Projekt je inicijalno razvijen s ciljem programiranja s više niti i učinkovitog rada na sustavima s više jezgri, uključujući pružanje sredstava na razini operatera za organiziranje paralelnog računanja i interakcije između metoda koje se paralelno izvode. Jezik također pruža ugrađenu zaštitu od previše dodijeljenih memorijskih blokova i pruža mogućnost korištenja skupljača smeća.

Nova verzija dodaje podršku za generičke funkcije i tipove (generike), uz pomoć kojih programer može definirati i koristiti funkcije dizajnirane za rad s nekoliko tipova odjednom. Također je moguće koristiti sučelja za stvaranje kombiniranih tipova koji obuhvaćaju više tipova podataka. Podrška za generike implementirana je bez prekidanja kompatibilnosti s postojećim kodom. // Zadane vrijednosti zbroja, radi za tipove int64 i float64 func SumIntsOrFloats[K usporedivo, V int64 | float64](m map[K]V) V { var s V for _, v := raspon m { s += v } return s } // Još jedna opcija s generičkom definicijom tipa: type Number interface { int64 | float64 } func SumBrojevi[K usporediv, V broj](m map[K]V) V { var s V za _, v := raspon m { s += v } return s }

Ostala poboljšanja:

  • Pomoćni programi za testiranje fuzzing koda integrirani su u standardni alat. Tijekom fuzzing testiranja generira se tok svih mogućih slučajnih kombinacija ulaznih podataka i bilježe se mogući kvarovi tijekom njihove obrade. Ako se niz sruši ili ne odgovara očekivanom odgovoru, vrlo je vjerojatno da takvo ponašanje ukazuje na grešku ili ranjivost.
  • Dodana je podrška za multi-modularne radne prostore, što vam omogućuje izvršavanje naredbi na više modula odjednom, što vam omogućuje da istovremeno gradite i pokrećete kod u više modula.
  • Značajne optimizacije performansi su napravljene za sustave temeljene na Apple M1, ARM64 i PowerPC64 procesorima. Omogućena je mogućnost korištenja registara umjesto stoga za prosljeđivanje argumenata funkcijama i vraćanje rezultata. Poboljšano inline odmotavanje petlji od strane kompilatora. Provjera tipa u prevoditelju potpuno je redizajnirana. Neki testovi pokazuju povećanje izvedbe koda od 20% u usporedbi s prethodnim izdanjem, ali sama kompilacija traje oko 15% dulje.
  • U runtimeu je povećana učinkovitost vraćanja oslobođene memorije operativnom sustavu i poboljšan je rad skupljača smeća čije je ponašanje postalo predvidljivije.
  • Novi paketi net/netip i debug/buildinfo dodani su u standardnu ​​biblioteku. Podrška za TLS 1.0 i 1.1 onemogućena je prema zadanim postavkama u kodu klijenta. Modul crypto/x509 prestao je obrađivati ​​certifikate potpisane pomoću SHA-1 raspršivanja.
  • Zahtjevi za okruženje u Linuxu su podignuti; da biste radili, sada morate imati Linux kernel najmanje verzije 2.6.32. U sljedećem izdanju očekuju se slične promjene za FreeBSD (podrška za granu FreeBSD 11.x bit će ukinuta) i bit će potreban barem FreeBSD 12.2 za rad.

Izvor: opennet.ru

Dodajte komentar