Izdanje Go 1.22

Predstavljen je novi izdanak programskog jezika Go 1.22, koji se razvija unutar tvrtke Google uz sudjelovanje zajednice kao hibridno rješenje, kombinirajući visoke performanse kompiliranih jezika s prednostima skriptnih jezika, kao što su lakoća pisanja koda, brzina razvoja i zaštita od grešaka. Kod projekta distribuira se pod BSD licencom.

Sintaksa Go-a temelji se na poznatim elementima jezika C, uz neka posuđenica iz jezika Oberon. Jezik je dovoljno sažet, ali pritom je kod lako čitljiv i razumljiv. Kod napisan u jeziku Go se kompajlira u odvojene binarne izvršne datoteke, koje se izvode nativno, bez korištenja virtualne mašine (moduli za profiliranje, debagiranje i drugi sustavi za otkrivanje problema integriraju se kao runtime komponente), što omogućava postizanje performansi usporedivih s programima na jeziku C.

Projekt se prvotno razvija s naglaskom na višedretveno programiranje i učinkovito djelovanje na višekratnim sustavima, uključujući pružanje alata na razini operatora za organizaciju paralelnih izračuna i interakciju između paralelno izvedenih metoda. Jezik također pruža ugrađene mehanizme zaštite od izlaska iz dozvoljenih područja dodijeljenih blokova memorije i osigurava mogućnost korištenja sakupljača smeća.

Među promjenama u novom izdanju:

  • U 'for' petlje dodana je podrška za definiranje raspona cijelih brojeva, na primjer, za prolazak kroz vrijednosti od 0 do 9 sada se može koristiti petlja 'for i := range 10 {…}'.
  • U 'for' petlje dodana je eksperimentalna (GOEXPERIMENT=rangefunc) podrška za funkcije definicije raspona, što omogućava navođenje funkcije kao iteratora. Na primjer, 'for i, x := range slices.Backward(s) {…}'.
  • Riješen je dugogodišnji problem s 'for' petljama, koji je prilikom pozivanja gorutina rezultirao zajedničkom uporabom varijabli petlje u različitim iteracijama. Na primjer, kod values := []string{"a", "b", "c"} for _, v := range values { go func() { fmt.Println(v) done <- true }() } sada će ispisivati 'a', 'b' i 'c', a ne samo 'c', kao što je to bilo ranije.
  • Optimizirano je upravljanje memorijom u runtime-u, što je dovelo do povećanja performansi od 1-3% i smanjenja potrošnje memorije u većini aplikacija za 1%.
  • Nastave se s radom na implementaciji optimizacija u kompajleru temeljenih na rezultatima profiliranja koda (PGO — optimizacija vođena profiliranjem), koja omogućava uzimanje u obzir osobina definirane tijekom izvođenja programa. U novoj verziji, kompajler koristi alate za devirtualizaciju za zamjenu neizravnih poziva raznih metoda s izvođenjem razvijenih inline-blokova.
  • S aktivacijom PGO, dodana promjena omogućila je povećanje performansi većine programa za 2-14%.
  • Kompajler je dobio eksperimentalnu (GOEXPERIMENT=newinliner) poboljšanu implementaciju mehanizma razvijanja (inlining) poziva, koja koristi heuristiku za razlikovanje važnih i manje važnih operacija.
  • U standardnu biblioteku dodan je paket «math/rand/v2», koji nudi cjelovitiji API i koristi brže algoritme za generaciju pseudo-slučajnih brojeva.
  • U paket net/http.ServeMux dodana je mogućnost specificiranja metoda i obrazaca u predlošcima; na primjer, obrazac «GET /static/{id}/» će se primijeniti na zahtjeve s HTTP metodom «GET» i sačuvati vrijednost drugog segmenta tražene putanje u identifikatoru «id».
  • U paket database/sql dodana je podrška za tip Null[T], koji omogućava skeniranje stupaca koji mogu prihvatiti vrijednost NULL. U paket slices dodana je funkcija Concat za spajanje više sliceova bilo kojeg tipa.
  • U naredbama za rad s radnim prostorima (kolekcijama modula), omogućena je upotreba direktorija «vendor», koji sadrži ovisnosti o sadržaju radnog prostora. Direktorij se stvara prilikom izvođenja naredbe «go work vendor» i koristi se u naredbama za gradnju prilikom postavljanja opcije "-mod=vendor" (uključeno zadano kada postoji direktorij vendor).

Promjene u ponašanju alata.

  • go get više nije podržan izvan modula u zastarjelom GOPATH režimu (tj. s GO111MODULE=off). Druge naredbe za gradnju, poput go build i go test, nastaviti će raditi za zastarjele GOPATH programe tijekom neodređenog vremena.
  • go mod init više ne pokušava uvesti zahtjeve za module iz konfiguracijskih datoteka drugih alata dobavljača (kao što je Gopkg.lock).
  • go test -cover sada ispisuje sažetak pokrivenosti za pakete koji nemaju vlastite testne datoteke. Prije Go 1.22, go test -cover za takav paket izvještavao bi? mymod/mypack [no test files]

    i sada s Go 1.22 funkcije u paketu smatraju se nepokrivenima: mymod/mypack coverage: 0.0% izjava. Imajte na umu: ako paket uopće ne sadrži izvršnog koda, ne možemo izvijestiti o značajnom postotku pokrivenosti; za takve pakete go test i dalje će izvještavati o nedostatku testnih datoteka.

  • Web sučelje alata trace je blago ažurirano u okviru podrške za novi tracer, riješeni su neki problemi i poboljšana čitljivost raznih stranica. Web sučelje sada podržava pregled tragova u prikazu usmjerenom prema tokovima. Alat za pregled tragova također prikazuje ukupno trajanje svih sistemskih poziva. Ova poboljšanja se odnose samo na pregled tragova stvorenih programima izrađenim u Go 1.22 ili novijim verzijama. U budućem izdanju, neka od ovih poboljšanja bit će uključena u tragove stvorene starijom verzijom Go.
  • Okruženje izvršavanja sada pohranjuje metapodatke prikupljanja smeća na temelju tipova bliže svakom objektu u hrpi. Ova promjena također smanjuje troškove memorije većine Go programa otprilike za 1% putem deduplifikacije suvišnih metapodataka. U nekim programima poboljšanje može biti manje, budući da ova promjena ispravlja granice klase veličine alokatora memorije, pa se neki objekti mogu premjestiti u višu klasu veličine. Posljedica ove promjene je to što će adrese nekih objekata, koje su ranije uvijek bile poravnate na granici od 16 bajtova (ili više), sada biti poravnate samo na granici od 8 bajtova. Neki programi koji koriste assembler instrukcije koje zahtijevaju da adrese memorije budu poravnate na veličinu veću od 8 bajtova i oslanjaju se na prethodno ponašanje poravnanja alokatora memorije mogu ispasti iz pogona, ali očekujemo da će takvi programi biti rijetki. Takvi programi mogu biti izrađeni s GOEXPERIMENT=noallocheaders s mogućnošću povratka na stari model metapodataka i obnavljanja prethodnog ponašanja poravnanja, ali vlasnici paketa trebaju ažurirati svoj assembler kod kako bi izbjegli pretpostavke o poravnanju, jer će ova zaobilaznica biti uklonjena u budućem izdanju.
  • Kao što je navedeno u bilješkama uz izdanje Go 1.20, Go 1.22 sada zahtijeva konačnu verziju Go 1.20 ili noviju za početno sastavljanje. Očekujemo da će Go 1.24 zahtijevati konačnu verziju Go 1.22 ili novije za početno sastavljanje.
    Izvor (go.dev)

Izvor: linux.org.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster