Vydání Go 1.22

Programovací jazyk Go verze 1.22 je vydáván. Google s přispěním komunity vyvíjí hybridní řešení, které kombinuje vysoký výkon kompilovaných jazyků s výhodami skriptovacích jazyků, jako je snadnost psaní, rychlý vývoj a ochrana proti chybám. Kód projektu je distribuován pod licencí BSD.

Syntaxe jazyka Go je založena na známých prvcích jazyka C s některými výpůjčkami z Oberonu. Jazyk je relativně stručný, ale snadno čitelný a srozumitelný. Kód Go je kompilován do samostatných binárních spustitelných souborů, které běží nativně, bez nutnosti virtuálního stroje (profilování, ladění a další subsystémy pro detekci problémů za běhu jsou integrovány jako běhové komponenty), čímž dosahuje výkonu srovnatelného s programy v jazyce C.

Projekt je od základů navržen s ohledem na vícevláknové programování a efektivní provoz na vícejádrových systémech, včetně nástrojů na úrovni operátora pro organizaci paralelních výpočtů a interakcí mezi souběžně prováděnými metodami. Jazyk také poskytuje vestavěnou ochranu proti přetečení paměti a podporuje garbage collection.

Mezi změny v nové verzi:

  • Do smyček „for“ byla přidána podpora pro definování rozsahů celých čísel. Například pro procházení hodnot od 0 do 9 můžete nyní použít smyčku „for i := range 10 {...}“.
  • Do smyček „for“ (GOEXPERIMENT=rangefunc) byla přidána experimentální podpora pro funkce pro výběr rozsahu, což umožňuje zadat funkci jako iterátor. Například „for i, x := range slices.Backward(s) {…}“
  • Dlouhodobý problém s for smyčkami, který způsoboval sdílení proměnných smyčky voláním goroutin napříč iteracemi, byl vyřešen. Například kód values ​​​​:= []string{"a", "b", "c"} for _, v := range values ​​​​{ go func() { fmt.Println(v) done <- true }() } nyní vypíše "a", "b" a "c" namísto pouze "c" jako dříve.
  • Byly provedeny optimalizace správy paměti za běhu, což vedlo ke zvýšení výkonu o 1–3 % a ke snížení spotřeby paměti o 1 % ve většině aplikací.
  • Pokračovaly práce na implementaci optimalizací řízených profily (PGO) v kompilátoru s ohledem na běhové funkce. Nová verze kompilátoru využívá nástroje pro devirtualizaci k nahrazení nepřímých volání metod rozšířeným inline prováděním.
  • S povoleným PGO tato přidaná změna zlepšila výkon většiny programů o 2–14 %.
  • Do kompilátoru byla přidána experimentální (GOEXPERIMENT=newinliner) vylepšená implementace mechanismu vkládání volání, která využívá heuristiky k oddělení důležitých a nedůležitých operací.
  • Do standardní knihovny byl přidán balíček „math/rand/v2“, který poskytuje komplexnější API a rychlejší algoritmy pro generování pseudonáhodných čísel.
  • Balíček net/http.ServeMux nyní podporuje specifikaci metod a masek v šablonách. Například šablona „GET /static/{id}/“ bude použita na požadavky s HTTP metodou „GET“ a uloží hodnotu druhého segmentu požadované cesty do identifikátoru „id“.
  • Balíček database/sql nyní podporuje typ Null[T], což umožňuje skenování sloupců, které mohou mít hodnotu null. Balíček slices nyní obsahuje funkci Concat pro sloučení více řezů libovolného typu.
  • Příkazy pro práci s pracovními prostory (kolekcemi modulů) nyní podporují použití adresáře „vendor“, který obsahuje závislosti na obsahu pracovního prostoru. Tento adresář se vytvoří při spuštění příkazu „go work vendor“ a použije se v příkazech sestavení, pokud je zadána volba „-mod=vendor“ (ve výchozím nastavení povolena, pokud adresář vendor existuje).

Změny v chování užitných zdrojů.

  • Příkaz go get již není podporován mimo modul v režimu staršího GOPATH (tj. s GO111MODULE=off). Ostatní příkazy build, jako například go build a go test, budou pro starší programy GOPATH fungovat i nadále po neurčito.
  • Soubor go mod init se již nepokouší importovat požadavky na moduly z konfiguračních souborů pro nástroje jiných dodavatelů (například Gopkg.lock).
  • Příkaz go test -cover nyní vypíše souhrnná data pokrytí pro balíčky, které nemají vlastní testovací soubory. Před verzí Go 1.22 by příkaz go test -cover vypsal souhrnná data pokrytí pro takový balíček: mymod/mypack [žádné testovací soubory]

    a nyní, od verze Go 1.22, jsou funkce v balíčku považovány za nekryté: pokrytí mymod/mypack: 0.0 % příkazů Poznámka: Pokud balíček neobsahuje žádný spustitelný kód, nemůžeme uvést smysluplné procento pokrytí; u takových balíčků bude go test i nadále hlásit chybějící testovací soubory.

  • Webové rozhraní nástroje pro trasování bylo v rámci podpory nového trasovače mírně aktualizováno. Bylo vyřešeno několik problémů a vylepšena čitelnost různých stránek. Webové rozhraní nyní podporuje kontrolu trasování v zobrazení bezpečném pro více vláken. Prohlížeč trasování nyní také zobrazuje celou dobu trvání všech systémových volání. Tato vylepšení se vztahují pouze na trasování generované programy vytvořenými v Go 1.22 nebo novějším. V budoucí verzi budou některá z těchto vylepšení provedena i u trasování generovaných staršími verzemi Go.
  • Runtime nyní ukládá metadata garbage collection založená na typech blíže ke každému objektu haldy. Tato změna také snižuje paměťovou náročnost většiny programů Go přibližně o 1 % deduplikací redundantních metadat. Zlepšení může být u některých programů menší, protože tato změna upravuje hranice tříd velikostí alokátoru paměti, takže některé objekty mohou být přesunuty do vyšší třídy velikostí. Důsledkem této změny je, že adresy některých objektů, které byly dříve vždy zarovnány na hranici 16 bajtů (nebo vyšší), budou nyní zarovnány pouze na hranici 8 bajtů. Některé programy, které používají assemblerové instrukce vyžadující zarovnání adres paměti na více než 8 bajtů a spoléhají se na předchozí chování zarovnání alokátoru paměti, mohou selhat, ale očekáváme, že takové programy budou vzácné. Takové programy lze sestavit s GOEXPERIMENT=noallocheaders s možností návratu ke starému modelu metadat a obnovení předchozího chování zarovnání, ale vlastníci balíčků by měli aktualizovat svůj assemblerový kód, aby se vyhnuli předpokladu zarovnání, protože toto řešení bude v budoucí verzi odstraněno.
  • Jak je uvedeno v poznámkách k verzi Go 1.20, Go 1.22 nyní vyžaduje pro počáteční sestavení finální verzi Go 1.20 nebo novější. Očekáváme, že Go 1.24 bude pro počáteční sestavení vyžadovat finální verzi Go 1.22 nebo novější.
    Originál (go.dev)

Zdroj: linux.org.ru

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster