GCC 16

GCC 16

Po roce vývoje byla vydána vydání volného souboru kompilátorů GCC 16.1, první významné vydání v nové větvi GCC 16.x. V souladu s schématem číslování vydání, verze 16.0 byla použita v procesu vývoje, a krátce před vydáním GCC 16.1 se již odštěpila větev GCC 17.0, na jejímž základě bude vytvořeno další významné vydání GCC 17.1.

Hlavní změny:

  • Výchozí režim pro jazyk C++ byl přepnut na používání standardu C++20 (dialekt GNU C++20, -std=gnu++20) namísto dříve navrhovaného C++17. Implementace C++20 ve standardní knihovně byla prohlášena za stabilní.
  • Byl přidán experimentální frontend ga68 pro kompilaci programů v programovacím jazyce Algol 68.
  • Byla přidána možnost výstupu diagnostických informací ve formátu HTML. Byly rozšířeny informace o průběhu vykonávání programu, které jsou zahrnuty při výstupu diagnostiky ve formátu SARIF, založeném na JSON (podpora „-fdiagnostics-format=json“ byla ukončena).
  • Byly rozšířeny optimalizace během fáze spojování (LTO, Link-Time Optimization). Byla přidána možnost „-flto-toplevel-asm-heuristics“, která zahrnuje heuristiku pro zlepšení optimalizace kódu s assemblerovými vloženími. Technika spekulativní devirtualizace (-fdevirtualize-speculatively) již není omezena na transformaci virtuálních metod a může být použita při transformaci na přímé volání jakýchkoli nepřímých volání funkcí, například volání přes ukazatele.
  • Byla implementována podpora vektorování cyklů, pro které není během kompilace známo počet iterací. Byla zvýšena účinnost zpracování předčasných výstupů z cyklu (například pomocí break).
  • Byla přidána experimentální podpora mnoha možností nedávno schváleného standardu C++26. Například byly realizovány:
    • Reflexe (Reflection, „-freflection“), což umožňuje sledování a modifikaci prvků programu během fáze kompilace. Byly přidány nové operátory „^^ (open-std.org)“ pro získání meta informací o gramatické konstrukci a „[:…:]“ pro provádění zpětné transformace. Pro transformaci a zpracování informací získaných během inspekce byla navržena knihovna std::meta a jsou dostupné možnosti jako výpočty s konstantami.
    • Smluvní programování (Smlouvy), které umožňuje stanovovat formální specifikace rozhraní pomocí třech nových operátorů: pre (předpoklad), post (přípustnost) a contract_assert (kontrola tvrzení). Operátor „pre“ určuje předpokládané podmínky, které musí být splněny před voláním (kontrola vstupních dat); „post“ - podmínky, které musí být dodrženy po provedení (požadavky na výstupní data); contract_assert - podmínky pro vznik výjimek. Tato možnost se objeví ve verzi GCC 16.
    • Operátor „template for“ pro iteraci přes prvky, jako jsou balíky parametrů, objekty podobné n-ticím a výsledky reflexe (metaobjekty), během doby kompilace ve stylu běžného cyklu. Při provádění „template for“ se tělo cyklu rozšiřuje pro každý prvek a každá iterace se zpracovává v samostatném rozsahu viditelnosti, kde je prvek sekvence, přes kterou cyklus iteruje, konstantní pro každou iteraci a může být použit ve konstantních výrazech (constexpr). V kontextu reflexe může být „template for“ použito pro procházení vlastnostmi tříd nebo výčtů.
    • Knihovna std::simd pro paralelizaci vykonávání operací nad daty pomocí sad instrukcí SIMD, jako jsou AVX-512 a NEON, s použitím standardního systému typů C++.
    • Knihovny std::inplace_vector, std::optional<T&>, std::copyable_function, std::function_ref, std::indirect, std::polymorphic a std::owner_equal.
  • Byly implementovány funkce související se standardem C++23, jako například výslovné řízení životního cyklu objektů a podpora specifikace kódování znaků diagnostických zpráv.
  • Byla rozšířena podpora standardu C23 (opennet.ru), například byla implementována možnost použití atributu „counted_by“ pro ověřování správnosti používání ukazatelů.
  • Pokračuje implementace standardů OpenMP 5.0, 5.1, 5.2 a 6.0 (Open Multi-Processing), které definují API a způsoby použití metod paralelního programování na vícejádrových a hybridních (CPU+GPU/DSP) systémech se sdílenou pamětí a bloky vektorizace (SIMD). Byla vylepšena implementace specifikací paralelního programování OpenACC 3.0, 3.3 a 3.4, které definují prostředky pro provádění operací na GPU a specializovaných procesorech, jako je NVIDIA PTX.
  • Do backendu pro architekturu x86 byla přidána podpora procesorů AMD na základě mikroarchitektury Zen6 (-march=znver6), stejně jako procesorů Intel Wildcat Lake (-march=wildcatlake) a Nova Lake (-march=novalake).
  • V backendu generace kódu pro GPU AMD Radeon (GCN) byla implementována podpora akcelerátorů AMD Instinct MI300 (gfx942).
  • Pro architektury RISC-V, ARM, S/390 a LoongArch byla implementována podpora typu „_BitInt (N)“ pro definici celých čísel se specifikovaným počtem bitů.

Zdroj: linux.org.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster