Vydanie programovacieho jazyka Go 1.18

Predstavuje sa vydanie programovacieho jazyka Go 1.18, ktorý vyvíja spoločnosť Google za účasti komunity ako hybridné riešenie, ktoré kombinuje vysoký výkon kompilovaných jazykov s takými výhodami skriptovacích jazykov, ako je jednoduché písanie kódu. , rýchlosť vývoja a ochrana pred chybami. Kód projektu je distribuovaný pod licenciou BSD.

Syntax Go je založená na známych prvkoch jazyka C s niektorými výpožičkami z jazyka Python. Jazyk je pomerne stručný, ale kód je ľahko čitateľný a zrozumiteľný. Go kód je kompilovaný do samostatných binárnych spustiteľných súborov, ktoré bežia natívne bez použitia virtuálneho stroja (profilovanie, ladiace moduly a ďalšie subsystémy na detekciu problémov pri behu sú integrované ako runtime komponenty), čo umožňuje výkon porovnateľný s programami v jazyku C.

Projekt je pôvodne vyvinutý s ohľadom na viacvláknové programovanie a efektívnu prevádzku na viacjadrových systémoch, vrátane poskytovania prostriedkov na úrovni operátora na organizáciu paralelných výpočtov a interakciu medzi paralelne vykonávanými metódami. Jazyk tiež poskytuje vstavanú ochranu pred nadmerne alokovanými pamäťovými blokmi a poskytuje možnosť používať zberač odpadu.

Nová verzia pridáva podporu pre generické funkcie a typy (generics), pomocou ktorých môže vývojár definovať a používať funkcie určené na prácu s viacerými typmi naraz. Je tiež možné použiť rozhrania na vytváranie kombinovaných typov, ktoré zahŕňajú viacero typov údajov. Podpora generík je implementovaná bez narušenia spätnej kompatibility s existujúcim kódom. // Súčet nastavených hodnôt, funguje pre typy int64 a float64 func SumIntsOrFloats[K porovnateľné, V int64 | float64](m map[K]V) V { var s V for _, v := rozsah m { s += v } return s } // Ďalšia možnosť s definíciou generického typu: type Number interface { int64 | float64 } func SumNumbers[K porovnateľné, V Počet](m mapa[K]V) V { var s V for _, v := rozsah m { s += v } return s }

Ďalšie vylepšenia:

  • Pomôcky na testovanie fuzzing kódu sú integrované do štandardnej sady nástrojov. Pri fuzzing testovaní sa generuje prúd všetkých možných náhodných kombinácií vstupných dát a zaznamenávajú sa prípadné poruchy pri ich spracovaní. Ak sekvencia zlyhá alebo nezodpovedá očakávanej odozve, potom toto správanie s vysokou pravdepodobnosťou naznačuje chybu alebo zraniteľnosť.
  • Pridaná podpora pre multimodulárne pracovné priestory, ktorá vám umožňuje vykonávať príkazy na viacerých moduloch naraz, čo vám umožňuje súčasne vytvárať a spúšťať kód vo viacerých moduloch.
  • Pre systémy založené na procesoroch Apple M1, ARM64 a PowerPC64 boli vykonané významné optimalizácie výkonu. Povolená možnosť používať registre namiesto zásobníka na odovzdávanie argumentov funkciám a vrátenie výsledku. Vylepšené inline rozvinutie slučiek kompilátorom. Kontrola typov v kompilátore bola úplne prepracovaná. Niektoré testy ukazujú 20% zvýšenie výkonu kódu v porovnaní s predchádzajúcim vydaním, ale samotná kompilácia trvá približne o 15% dlhšie.
  • Za behu sa zvýšila efektivita vracania uvoľnenej pamäte do operačného systému a zlepšila sa činnosť garbage collectora, ktorého správanie sa stalo predvídateľnejším.
  • Do štandardnej knižnice boli pridané nové balíčky net/netip a debug/buildinfo. Podpora pre TLS 1.0 a 1.1 je v klientskom kóde predvolene vypnutá. Modul crypto/x509 prestal spracovávať certifikáty podpísané pomocou hash SHA-1.
  • Požiadavky na prostredie v Linuxe boli zvýšené, aby ste mohli pracovať, teraz potrebujete mať linuxové jadro aspoň verzie 2.6.32. V ďalšom vydaní sa očakávajú podobné zmeny pre FreeBSD (podpora pre vetvu FreeBSD 11.x bude ukončená) a na fungovanie bude potrebné aspoň FreeBSD 12.2.

Zdroj: opennet.ru

Pridať komentár