PÀrast aastat arendust avaldatud avaldase kompilaatorite vaba versioon GCC 16.1, esimene oluline vÀljaanne uues GCC 16.x haru. Vastavalt vÀljaannete numeratsiooni skeemile, versiooni 16.0 kasutati arendustegevuse kÀigus ja just enne GCC 16.1 vÀljalaskmist harunes haru GCC 17.0, mille pÔhjal moodustatakse jÀrgmine oluline GCC 17.1 versioon.
Peamised muudatused:
- C++ keele vaikereĆŸiim on seatud kasutama standardit C++20 (GNU C++20 dialekt, -std=gnu++20) asemel, millele varem viidati C++17. C++20 rakendamine standardraamatukogus on kuulutatud stabiilseks.
- Komplekti kuulub katsetav esiots ga68 , mis kompileerib Algol 68 programmeerimiskeeles kirjutatudprogramme.
- Lisatud on vÔimalus kuvada diagnostikainfot HTML formaadis. TÔhustatud diagnostika vÀljundi raames programmi tÀitmise kohta esitatavat teavet SARIF, mis pÔhineb JSON-il (toetamine "-fdiagnostics-format=json" on lÔpetatud).
- Otsingutöötluse etapi optimeerimised (LTO, Link-Time Optimization) on laienenud. Lisatud on valik â-flto-toplevel-asm-heuristicsâ, mis sisaldab heuristikat assembleri sisestustega seotud koodioptimeerimise parandamiseks. Spekuleeriva devirtuatsioonitehnika (-fdevirtualize-speculatively) ei ole enam piiratud virtuaalmeetodite konversiooniga ja seda saab rakendada mis tahes kaudsete funktsioonikutsumiste otseseks kutsumiseks, nĂ€iteks nĂ€idatud nĂ€itajate kaudu tehtud kutsed.
- Implementatsiooni on tehtud tsĂŒklite vektoreerimise toe jaoks, mille puhul kompileerimise ajal ei ole iteratsioonide arvu teada. TĂ”husust on suurendatud tsĂŒkli ennetĂ€htaegsete vĂ€ljumiste (nĂ€iteks break kaudu) töötlemisel.
- Eksperimentaalne tugi on lisatud paljude vÔimalustele hiljuti heakskiidetud standardi C++26. NÀiteks on ellu viidud:
- Refleksioon (Reflection, â-freflectionâ), mis vĂ”imaldab jĂ€lgida ja muuta programmi elemendi kompilatsiooni staadiumis. Lisatud on uued operaatorid â^^ (open-std.org)â grammatilise struktuuri meta-informatsiooni saamiseks ja â[:âŠ:]â tagasipööramiseks. Saadud teabe konverteerimiseks ja töötlemiseks on ette nĂ€htud std::meta raamatukogu, mis pakub vĂ”imalusi, nagu konstantidega arvutamine.
- Lepinguprogrammimine (Lepingud), vĂ”imaldades mÀÀratleda liideste formaalseid spetsifikatsioone kolme uue operaatori kaudu: pre (eeltingimus), post (pĂ€rasttingimus) ja contract_assert (vĂ€ite kontrollimine). Operaator âpreâ mÀÀratleb eeltingimused, mida tuleb enne kutsumist tĂ€ita (sisendi kontroll); âpostâ â tingimused, mida tuleb jĂ€rgida pĂ€rast tĂ€itmist (vĂ€ljundi nĂ”uded); contract_assert â erandite tekkimise tingimused. See vĂ”imalus ilmub GCC 16-s.
- Operaator âtemplate forâ elementide, nagu parameetrite paketid, tupikutena sarnased objektid ja reflesten tulemused (metaobjektid), lĂ€bimiseks kompileerimise ajal tavapĂ€rase tsĂŒkli stiilis. âtemplate forâ teostamisel avatakse tsĂŒkli keha igale elemendile ja iga iteratsioon töödeldakse eraldi ulatuses, kus iteratsiooni kĂ€igus oleva jĂ€rjestuse element on iga iteratsiooni jaoks konstant ja vĂ”ib osaleda konstantsetes vĂ€ljendites (constexpr). Reflesti kontekstis vĂ”ib âtemplate forâ kasutada klasside vĂ”i nimekirjade omaduste lĂ€bimiseks.
- Uuenduslik std::simd raamatukogu andmeoperatsioonide teostamise paraleelseteks kĂ€sitlusteks SIMD kĂ€skude, nagu AVX-512 ja NEON, abil, kasutades C++ standardset tĂŒĂŒbivĂ”rku.
- Raamatukogud std::inplace_vector, std::optional, std::copyable_function, std::function_ref, std::indirect, std::polymorphic ja std::owner_equal.
- Rakendatud on C++23 standardiga seotud vÔimalused, nagu selge objektide eluea haldamine ja toetamine dokumenteerimisnÔuete kodeeringu nÀidised.
- Laienenud toetus standardile C23 (opennet.ru), nÀiteks on rakendatud omaduse «counted_by» kasutamise vÔimalust nÀitajate Ôige kasutamise kontrollimiseks.
- JĂ€tkub standardite rakendamine OpenMP 5.0, 5.1, 5.2 ja 6.0 (Open Multi-Processing), mis mÀÀratleb API ja meetodite kasutamise viisid paralleelse programmeerimise rakendamiseks mitme tuumaga ja hĂŒbriidsetes (CPU+GPU/DSP) sĂŒsteemides, mis kasutavad jagatud mĂ€lu ja vektorisĂŒsteemide (SIMD) plokke. Parandatud paralleelse programmeerimise spetsifikatsioonide rakendamine OpenACC 3.0, 3.3 ja 3.4, mis mÀÀratleb vahendid operatsioonide (offloading) edastamiseks GPU ja spetsialiseeritud protsessoritele, nagu NVIDIA PTX.
- Support for AMD processors based on the Zen6 microarchitecture (-march=znver6) has been added to the backend for x86 architecture, as well as for Intel Wildcat Lake (-march=wildcatlake) and Nova Lake (-march=novalake) processors.
- Support for AMD Radeon (GCN) GPU code generation backend has been implemented for AMD Instinct MI300 (gfx942) accelerators.
- Support for the type "_BitInt (N)" for defining integers with a specified number of bits has been implemented for RISC-V, ARM, S/390, and LoongArch architectures.
Allikas: linux.org.ru
