GCC 16

GCC 16

Po roce vývoje publikováno vydání bezplatné sady kompilátorů GCC 16.1, první hlavní vydání v nové větvi GCC 16.x. Podle schéma číslování vydáníBěhem vývoje byla použita verze 16.0 a krátce před vydáním GCC 16.1 již byla jedna větev rozdělena do forků. GCC 17.0, který bude tvořit základ pro další hlavní verzi GCC 17.1.

hlavní změny:

  • Výchozí režim pro jazyk C++ byl přepnut na použití standardního C ++ 20 (dialekt GNU C++20, -std=gnu++20) místo toho, co bylo dříve navrženo C ++ 17Implementace C++20 ve standardní knihovně byla prohlášena za stabilní.
  • Součástí je experimentální frontend. Ga68 pro kompilaci programů v programovacím jazyce Algol 68.
  • Přidána možnost výstupu diagnostických informací ve formátu HTML. Rozšířené informace o provádění programu zahrnuté do diagnostického výstupu ve formátu HTML. ŠARIF, založené na JSON (podpora pro „-fdiagnostics-format=json“ byla ukončena).
  • Optimalizace pro optimalizaci link-time (LTO) byly rozšířeny. Byla přidána volba „-flto-toplevel-asm-heuristics“, která umožňuje heuristikám vylepšit optimalizaci kódu pomocí assembly injects. Technika spekulativní devirtualizace (-fdevirtualize-speculatively) se již neomezuje pouze na převod virtuálních metod a lze ji použít k převodu jakýchkoli nepřímých volání funkcí, jako jsou volání prostřednictvím ukazatelů, na přímá volání.
  • Byla implementována podpora vektorizace cyklů, u kterých je počet iterací v době kompilace neznámý. Byla vylepšena efektivita zpracování předčasných ukončení cyklů (např. přes break).
  • Přidána experimentální podpora mnoho příležitosti nedávno schválený standard C ++ 26Například byly implementovány následující:
    • Reflexe (Odraz, „-freflection“), což umožňuje sledovat a upravovat prvky programu ve fázi kompilace. Byly přidány nové operátory:^^ (open-std.org)"získat metainformace o gramatické konstrukci a"[:…:]" pro provedení inverzní transformace. Pro transformaci a zpracování informací získaných během inspekce je k dispozici knihovna std::meta a k dispozici jsou funkce, jako jsou výpočty s konstantami.
    • Smluvní programování (Smlouvy), který umožňuje definovat formální specifikace rozhraní pomocí tří nových operátorů: pre (předběžná podmínka), post (postpodmínka) a contract_assert (kontrola tvrzení). Operátor „pre“ specifikuje předpoklady, které musí být splněny před voláním (validace vstupu); „post“ specifikuje podmínky, které musí být splněny po provedení (požadavky na výstup); a contract_assert specifikuje podmínky výjimky. Tato funkce bude k dispozici v GCC 16.
    • Operátor "šablona pro" pro iteraci nad prvky, jako jsou balíčky parametrů, objekty podobné n-ticím a výsledky reflexe (metaobjekty) v době kompilace ve stylu regulární smyčky for. Při provádění „šablony for“ je tělo smyčky rozbaleno pro každý prvek a každá iterace je zpracována v samostatném oboru platnosti, ve kterém je prvek sekvence, nad kterou je smyčka iterována, konstantní pro každou iteraci a může se účastnit konstantních výrazů (constexpr). V kontextu reflexe lze „šablonu for“ použít k iteraci nad vlastnostmi tříd nebo výčtů.
    • Knihovna std::simd pro paralelizaci datových operací pomocí instrukčních sad SIMD, jako jsou AVX-512 a NEON, s využitím standardního typového systému C++.
    • Knihovny std::inplace_vector, std::optional , std::kopírovatelná_funkce, std::function_ref, std::indirect, std::polymorphic a std::owner_equal.
  • Implementované funkce související se standardem C++23, jako například zřejmé správa životnosti objektů a podpora určení kódování znaků diagnostických zpráv.
  • Rozšířená podpora standardu C23 (opennet.ru)Například byla implementována možnost použít atribut „counted_by“ ke kontrole správnosti použití ukazatelů.
  • Pokračování implementace standardů OpenMP 5.0, 5.1, 5.2 a 6.0 (Open Multi-Processing), která definuje API a metody pro aplikaci metod paralelního programování na vícejádrových a hybridních (CPU+GPU/DSP) systémech se sdílenou pamětí a vektorizačními jednotkami (SIMD). Vylepšené implementace specifikací paralelního programování OpenACC 3.0, 3.3 a 3.4, které definují prostředky pro přesměrování operací na GPU a specializované procesory, jako je NVIDIA PTX.
  • Backend x86 nyní podporuje procesory AMD založené na mikroarchitektuře Zen6 (-march=znver6) a také procesory Intel Wildcat Lake (-march=wildcatlake) a Nova Lake (-march=novalake).
  • Backend pro generování kódu grafických karet AMD Radeon (GCN) nyní podporuje akcelerátory AMD Instinct MI300 (gfx942).
  • Pro architektury RISC-V, ARM, S/390 a LoongArch byla implementována podpora pro typ "_BitInt(N)" pro definování celých čísel se zadaným počtem bitů.

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