Po roku vývoja zverejnená vydanie bezplatnej sady kompilátorov GCC 16.1, prvé hlavné vydanie v novej vetve GCC 16.x. Podľa schéma číslovania vydaní, počas vývoja bola použitá verzia 16.0 a krátko pred vydaním GCC 16.1 už bola jedna vetva rozdelená na viacero častí. GCC 17.0, ktorý bude tvoriť základ pre ďalšie hlavné vydanie GCC 17.1.
Hlavné zmeny:
- Predvolený režim pre jazyk C++ bol prepnutý na použitie štandardného C ++ 20 (dialekt GNU C++20, -std=gnu++20) namiesto toho, čo bolo predtým navrhované C ++ 17Implementácia C++20 v štandardnej knižnici bola vyhlásená za stabilnú.
- Súčasťou je experimentálne frontendové rozhranie. ga68 na 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 vykonávaní programu zahrnuté do diagnostického výstupu vo formáte HTML. ŠARIF, založené na JSON (podpora pre „-fdiagnostics-format=json“ bola ukončená).
- Optimalizácie pre optimalizáciu času spojenia (LTO) boli rozšírené. Bola pridaná možnosť „-flto-toplevel-asm-heuristics“, ktorá umožňuje heuristikám zlepšiť optimalizáciu kódu pomocou assembly injects. Technika špekulatívnej devirtualizácie (-fdevirtualize-speculatively) už nie je obmedzená na konverziu virtuálnych metód a možno ju použiť na konverziu akýchkoľvek nepriamych volaní funkcií, ako sú volania prostredníctvom ukazovateľov, na priame volania.
- Bola implementovaná podpora pre vektorizáciu slučiek, pre ktoré nie je v čase kompilácie známy počet iterácií. Zlepšila sa efektivita spracovania skorých ukončení slučky (napr. cez prerušenie).
- Pridaná experimentálna podpora veľa príležitosti nedávno schválená norma C ++ 26Napríklad boli implementované nasledujúce:
- Reflexia (Odraz, „-freflection“), čo umožňuje monitorovať a upravovať prvky programu vo fáze kompilácie. Boli pridané nové operátory:^^ (open-std.org)„získať metainformácie o gramatickej konštrukcii a“[:…:]" na vykonanie inverznej transformácie. Na transformáciu a spracovanie informácií získaných počas kontroly je k dispozícii knižnica std::meta a k dispozícii sú aj funkcie, ako sú výpočty s konštantami.
- Zmluvné programovanie (Zákazky), ktorý umožňuje definovať formálne špecifikácie rozhrania pomocou troch nových operátorov: pre (predpoklad), post (postpodmienka) a contract_assert (kontrola tvrdenia). Operátor „pre“ určuje predpoklady, ktoré musia byť splnené pred volaním (validácia vstupu); „post“ určuje podmienky, ktoré musia byť splnené po vykonaní (požiadavky na výstup); a contract_assert určuje podmienky výnimky. Táto funkcia bude dostupná v GCC 16.
- Operátor "šablóna pre„na iterovanie cez prvky, ako sú balíky parametrov, objekty podobné n-ticiam a výsledky reflexie (metaobjekty) počas kompilácie v štýle bežnej slučky for. Pri vykonávaní „šablóny for“ sa telo slučky rozbalí pre každý prvok a každá iterácia sa spracuje v samostatnom rozsahu, v ktorom je prvok sekvencie, cez ktorú sa slučka iteruje, konštantný pre každú iteráciu a môže sa zúčastňovať konštantných výrazov (constexpr). V kontexte reflexie sa „šablóna for“ môže použiť na iterovanie cez vlastnosti tried alebo enumerácií.
- Knižnica std::simd na paralelizáciu dátových operácií pomocou inštrukčných sád 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 , std::kopírovateľná_funkcia, std::ref_funkcie, std::indirect, std::polymorphic a std::owner_equal.
- Implementované funkcie súvisiace so štandardom C++23, ako napríklad zrejmé správa životnosti objektov a podpora určenie kódovania znakov diagnostických správ.
- Rozšírená podpora pre štandard C23 (opennet.ru)Napríklad bola implementovaná možnosť použiť atribút „counted_by“ na kontrolu správnosti použitia ukazovateľov.
- Pokračovanie implementácia noriem OpenMP 5.0, 5.1, 5.2 a 6.0 (Open Multi-Processing), ktorá definuje API a metódy pre aplikáciu metód paralelného programovania na viacjadrových a hybridných (CPU+GPU/DSP) systémoch so zdieľanou pamäťou a vektorizačnými jednotkami (SIMD). Vylepšený implementácia špecifikácií paralelného programovania OpenACC 3.0, 3.3 a 3.4, ktoré definujú prostriedky na presunutie operácií na GPU a špecializované procesory, ako napríklad NVIDIA PTX.
- Backend x86 teraz podporuje procesory AMD založené na mikroarchitektúre Zen6 (-march=znver6), ako aj procesory Intel Wildcat Lake (-march=wildcatlake) a Nova Lake (-march=novalake).
- Backend pre generovanie kódu pre grafické procesory AMD Radeon (GCN) teraz podporuje akcelerátory AMD Instinct MI300 (gfx942).
- Pre architektúry RISC-V, ARM, S/390 a LoongArch bola implementovaná podpora pre typ „_BitInt(N)“ na definovanie celých čísel so zadaným počtom bitov.
Zdroj: linux.org.ru
