GCC 16

GCC 16

Po roku vývoja bol zverejnený vydanie voľného súboru kompilátorov GCC 16.1, prvé významné vydanie v novej vetve GCC 16.x. V súlade s schémou číslovania vydaní, verzia 16.0 bola použitá v priebehu vývoja, a krátko pred vydaním GCC 16.1 sa už odvetvila vetva GCC 17.0, na báze ktorej bude vytvorená nasledujúca významná verzia GCC 17.1.

Hlavné zmeny:

  • Predvolený režim pre jazyk C++ bol prepnútý na používanie štandardu C++20 (dialekt GNU C++20, -std=gnu++20) namiesto predtým navrhnutého C++17. Implementácia C++20 v štandardnej knižnici bola vyhlásená za stabilnú.
  • Do súboru bol zahrnutý experimentálny frontend ga68 pre kompiláciu programov v programovacom jazyku Algol 68.
  • Pridaná možnosť výstupu diagnostických informácií vo formáte HTML. Rozšírené informácie o priebehu programu, zahrnuté pri výstupe diagnostiky vo formáte SARIF, založenom na JSON (podpora „-fdiagnostics-format=json“ bola ukončená).
  • Rozšírené optimalizácie v štádiu prepojenia (LTO, Link-Time Optimization). Pridaná možnosť „-flto-toplevel-asm-heuristics“, ktorá zahrnuje heuristiku na zlepšenie optimalizácie kódu s assemblerovými vložkami. Technika spekulatívnej devírtualizácie (-fdevirtualize-speculatively) už nie je obmedzená na transformáciu virtuálnych metód a môže sa aplikovať pri transformácii na priame volania akýchkoľvek nepriamych volaní funkcií, napríklad volaní cez ukazovatele.
  • Realizovaná podpora vektorizácie cyklov, pre ktoré nie je v čase kompilácie známe číslo iterácií. Zvýšená efektivita spracovania predčasných výstupov z cyklu (napríklad cez break).
  • Bola pridaná experimentálna podpora mnohých možností nedávno schváleného štandardu C++26. Napríklad, realizované:
    • Reflexia (Reflection, „-freflection“), ktorá umožňuje sledovať a modifikovať prvky programu v štádiu kompilácie. Pridané nové operátory „^^ (open-std.org)“ na získanie metainformácií o gramatickej konštrukcii a „[:…:]“ na vykonanie spätnej transformácie. Na transformáciu a spracovanie získaných informácií počas inšpekcie bola navrhnutá knižnica std::meta a sú k dispozícii také možnosti, ako sú výpočty s konštantami.
    • Zmluvné programovanie (Contracts), ktoré umožňuje definovať formálne špecifikácie rozhraní pomocou troch nových operátorov: pre (predpoklad), post (popre) a contract_assert (kontrola tvrdenia). Operátor „pre“ určuje predpoklady, ktoré musia byť splnené pred volaním (kontrola vstupných údajov); „post“ — podmienky, ktoré musia byť splnené po vykonaní (požiadavky na výstupné údaje); contract_assert — podmienky vzniku výnimiek. Možnosť sa objaví v GCC 16.
    • Operátor „template for“ na prechádzanie prvkami, ako sú balíky parametrov, podobné n-ticovým objektom a výsledky reflexie (metaobjekty), počas kompilácie v štýle bežného cyklu. Pri vykonávaní „template for“ sa telo cyklu rozširuje pre každý prvok a každá iterácia sa spracováva v samostatnej oblasti viditeľnosti, v ktorej je prvok sekvencie, po ktorej sa iteruje, konštantou pre každú iteráciu a môže sa zúčastniť v konštantných výrazových (constexpr) operáciách. V kontexte reflexie sa „template for“ môže použiť na prechod cez vlastnosti tried alebo enumerácií.
    • Knižnica std::simd na paralelizáciu vykonávania operácií nad údajmi pomocou súborov inštrukcií SIMD, ako sú AVX-512 a NEON, s použitím štandardného typového systému C++.
    • Knižnice std::inplace_vector, std::optional<T&>, std::copyable_function, std::function_ref, std::indirect, std::polymorphic a std::owner_equal.
  • Boli implementované funkcie súvisiace s normou C++23, ako napríklad explicitné riadenie životnosti objektov a podpora určenie kódovania znakov diagnostických správ.
  • Bola rozšírená podpora normy C23 (opennet.ru), napríklad bola implementovaná možnosť používania atribútu „counted_by“ na kontrolu správneho používania ukazovateľov.
  • Pokračuje implementácia noriem OpenMP 5.0, 5.1, 5.2 a 6.0 (Open Multi-Processing), ktoré definujú API a spôsoby aplikácie metód paralelného programovania na viacjadrových a hybridných (CPU+GPU/DSP) systémoch s zdieľanou pamäťou a blokmi vektorizácie (SIMD). Vylepšená implementácia špecifikácií paralelného programovania OpenACC 3.0, 3.3 a 3.4, ktoré definujú prostriedky na presun operácií (offloading) na GPU a špecializované procesory, ako sú NVIDIA PTX.
  • Do backendu pre architektúru x86 bola pridaná podpora procesorov AMD založených na mikroarchitektúre Zen6 (-march=znver6), ako aj procesorov Intel Wildcat Lake (-march=wildcatlake) a Nova Lake (-march=novalake).
  • V backendovej generácii kódu pre GPU AMD Radeon (GCN) je implementovaná podpora akcelerátorov AMD Instinct MI300 (gfx942).
  • Pre architektúry RISC-V, ARM, S/390 a LoongArch je implementovaná podpora typu „_BitInt (N)“ na definovanie celých čísel so špecifikovaným počtom bitov.

Zdroj: linux.org.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster