Izdanje Go programskog jezika 1.18

Predstavljeno je izdanje programskog jezika Go 1.18, koji razvija Google uz učešće zajednice kao hibridno rešenje koje kombinuje visoke performanse kompajliranih jezika sa takvim prednostima skriptnih jezika kao što je jednostavnost pisanje koda, brzi razvoj i zaštita od grešaka. Projektni kod se distribuira pod BSD licencom.

Sintaksa Go je zasnovana na poznatim elementima jezika C sa nekim pozajmicama iz jezika Python. Jezik je prilično sažet, ali je kod lak za čitanje i razumijevanje. Go kod se kompajlira u zasebne binarne izvršne datoteke koje se pokreću nativno bez upotrebe virtuelne mašine (profiliranje, otklanjanje grešaka i drugi podsistemi za otkrivanje problema tokom izvršavanja integrisani su kao komponente vremena izvršavanja), što omogućava postizanje performansi uporedivih sa C programima.

Projekat je inicijalno razvijen sa okom na višenitnom programiranju i efikasnom radu na sistemima sa više jezgara, uključujući obezbeđivanje sredstava implementiranih na nivou operatera za organizovanje paralelnog računarstva i interakciju između paralelno izvođenih metoda. Jezik također pruža ugrađenu zaštitu od prekoračenja dodijeljenih memorijskih blokova i pruža mogućnost korištenja sakupljač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đe je moguće koristiti interfejse za kreiranje kombinovanih tipova koji obuhvataju više tipova podataka. Podrška za generike je implementirana bez narušavanja kompatibilnosti sa postojećim kodom. // Sum skup vrijednosti, radi za tipove int64 i float64 func SumIntsOrFloats[K usporedivo, V int64 | float64](m map[K]V) V { var s V for _, v := opseg m { s += v } return s } // Druga opcija sa generičkom definicijom tipa: type Number interface { int64 | float64 } func SumNumbers[K uporediv, V broj](m mapa[K]V) V { var s V za _, v := opseg m { s += v } return s }

Ostala poboljšanja:

  • Uslužni programi za testiranje fuzzing koda su integrisani u standardni komplet alata. Tokom fuzing testiranja generiše se tok svih mogućih slučajnih kombinacija ulaznih podataka i evidentiraju se mogući kvarovi tokom njihove obrade. Ako se sekvenca sruši ili ne odgovara očekivanom odgovoru, onda je velika vjerovatnoća da ovo ponašanje ukazuje na grešku ili ranjivost.
  • Dodata podrška za multi-modularne radne prostore, omogućavajući vam da izvršavate komande na više modula odjednom, omogućavajući vam da istovremeno gradite i izvodite kod u više modula.
  • Značajne optimizacije performansi su napravljene za sisteme bazirane na Apple M1, ARM64 i PowerPC64 procesorima. Omogućena je mogućnost korištenja registara umjesto steka za prosljeđivanje argumenata funkcijama i vraćanje rezultata. Poboljšano inline odmotavanje petlji od strane kompajlera. Provjera tipa u kompajleru je potpuno redizajnirana. Neki testovi pokazuju povećanje performansi koda za 20% u odnosu na prethodno izdanje, ali sama kompilacija traje oko 15% duže.
  • Tokom rada, povećana je efikasnost vraćanja oslobođene memorije u operativni sistem i poboljšan rad sakupljača smeća, čije je ponašanje postalo predvidljivije.
  • Novi paketi net/netip i debug/buildinfo su dodati standardnoj biblioteci. Podrška za TLS 1.0 i 1.1 je podrazumevano onemogućena u kodu klijenta. Modul crypto/x509 je prestao obraditi certifikate potpisane pomoću SHA-1 hash-a.
  • Zahtjevi za okruženje u Linuxu su povećani; da biste radili, sada morate imati Linux kernel najmanje verzije 2.6.32. U sljedećem izdanju, slične promjene se očekuju za FreeBSD (podrška za FreeBSD 11.x granu će biti ukinuta) i barem će FreeBSD 12.2 biti potreban da radi.

izvor: opennet.ru

Dodajte komentar