Vydání programovacího jazyka Go 1.18

Představuje se vydání programovacího jazyka Go 1.18, který je vyvíjen společností Google za účasti komunity jako hybridní řešení, které kombinuje vysoký výkon kompilovaných jazyků s takovými výhodami skriptovacích jazyků, jako je snadnost psaní kódu, rychlý vývoj a ochrana proti chybám. Kód projektu je distribuován pod licencí BSD.

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

Projekt je zpočátku vyvíjen s ohledem na vícevláknové programování a efektivní provoz na vícejádrových systémech, včetně poskytování prostředků implementovaných na úrovni operátora pro organizaci paralelních výpočtů a interakci mezi paralelně prováděnými metodami. Jazyk také poskytuje vestavěnou ochranu proti přetečení alokovaných paměťových bloků a poskytuje možnost používat garbage collector.

Nová verze přidává podporu generických funkcí a typů (generics), s jejichž pomocí může vývojář definovat a používat funkce určené pro práci s více typy najednou. Je také možné použít rozhraní k vytvoření kombinovaných typů, které zahrnují více typů dat. Podpora pro generika je implementována bez narušení zpětné kompatibility se stávajícím kódem. // Součet hodnot sady, funguje pro typy int64 a float64 func SumIntsOrFloats[K srovnatelné, V int64 | float64](m map[K]V) V { var s V for _, v := rozsah m { s += v } return s } // Další možnost s definicí obecného typu: type Number interface { int64 | float64 } func SumNumbers[K srovnatelné, V Číslo](m mapa[K]V) V { var s V for _, v := rozsah m { s += v } return s }

Další vylepšení:

  • Nástroje pro testování fuzzing kódu jsou integrovány do standardní sady nástrojů. Při fuzzing testování je generován proud všech možných náhodných kombinací vstupních dat a jsou zaznamenávány případné poruchy při jejich zpracování. Pokud sekvence selže nebo neodpovídá očekávané reakci, pak toto chování s vysokou pravděpodobností ukazuje na chybu nebo zranitelnost.
  • Přidána podpora pro multi-modulární pracovní prostory, která vám umožní spouštět příkazy na více modulech najednou, což vám umožní současně vytvářet a spouštět kód ve více modulech.
  • Pro systémy založené na procesorech Apple M1, ARM64 a PowerPC64 byly provedeny významné optimalizace výkonu. Povolena možnost používat registry místo zásobníku k předávání argumentů funkcím a vracení výsledku. Vylepšené inline rozbalování smyček kompilátorem. Kontrola typů v kompilátoru byla zcela přepracována. Některé testy ukazují 20% nárůst výkonu kódu ve srovnání s předchozím vydáním, ale samotná kompilace trvá asi o 15% déle.
  • Za běhu se zvýšila efektivita vracení uvolněné paměti operačnímu systému a zlepšil se provoz garbage collectoru, jehož chování se stalo předvídatelnějším.
  • Do standardní knihovny byly přidány nové balíčky net/netip a debug/buildinfo. Podpora TLS 1.0 a 1.1 je v klientském kódu ve výchozím nastavení zakázána. Modul crypto/x509 přestal zpracovávat certifikáty podepsané pomocí hash SHA-1.
  • Požadavky na prostředí v Linuxu byly zvýšeny, pro práci je nyní potřeba mít linuxové jádro minimálně verze 2.6.32. V příštím vydání se očekávají podobné změny pro FreeBSD (podpora pro větev FreeBSD 11.x bude ukončena) a pro fungování bude vyžadováno alespoň FreeBSD 12.2.

Zdroj: opennet.ru

Přidat komentář