Aasta kestnud arenduse jÀrel on vÀlja antud tasuta GCC 16.1 kompilatsioonide komplekt, mis on esimene mÀrkimisvÀÀrne versioon uues GCC 16.x harus. Vaatamata vÀljaandmise numbrite jÀrjekorrale kasutati versiooni 16.0 arenduse kÀigus ning vahetult enne GCC 16.1 turuletulekut eraldus haru GCC 17.0, mille alusel luuakse jÀrgmine mÀrkimisvÀÀrne vÀljaanne GCC 17.1.
Peamised muudatused:
- C++ keele vaikereĆŸiim on vahetatud C++20 standardi (GNU C++20 dialekt, -std=gnu++20) kasutamisele, asendades varem pakutud C++17. C++20 teostus standardraamatukogus on kuulutatud stabiilseks.
- Komplekti on lisatud eksperimentaalne ga68 esiots kompilatsioonide tegemiseks programmeerimiskeeles Algol 68.
- Lisatud on vĂ”imalus diagnostiliste andmete vĂ€ljundi HTML-formaadis. Laiendatud on programmitĂ€itmise kĂ€iku kajastavat teavet, mis lisatakse diagnostika vĂ€ljundisse SARIF formaadis, mis pĂ”hineb JSON-il (tugi â-fdiagnostics-format=jsonâ on lĂ”petatud).
- Lintide optimeerimised sidumisetapis (LTO, Link-Time Optimization) on laiendatud. Lisatud on valik â-flto-toplevel-asm-heuristicsâ, mis hĂ”lmab heuristikatehnikaid, et parandada koodiintegratsiooni assembleri sisestustega. Spekulatiivse devirtuualiseerimise tehnika (-fdevirtualize-speculatively) ei piirdu enam virtuaalsete meetodite muundamisega ning seda saab rakendada mis tahes kaudsete funktsioonikutsumiste otseseks kutsemiseks, nĂ€iteks pointerite kaudu toimuvate kutsete puhul.
- 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.
- Lisatud eksperimentaalne tugi paljudele hiljuti kinnitatud C++26 standardi uutele funktsionaalustele. NĂ€iteks on rakendatud:
- Refleksioon (Reflection, «-freflection»), mis vĂ”imaldab jĂ€lgida ja muuta programmi elemente kompileerimise etapis. Lisatud on uued operaatorid «^^» meta-informatsiooni saamiseks grammatilisest konstruktsioonist ja «[:âŠ:]» tagasipööramiseks. Muundamiseks ja inspektsiooni kĂ€igus saadud informatsiooni töötlemiseks on pakutud raamatukogu std::meta ning saadaval on sellised vĂ”imalused nagu konstantidega arvutamine.
- Lepinguprogrammimine (Contracts), mis vĂ”imaldab mÀÀratleda formaalseid spetsifikatsioone liideste jaoks kolme uue operaatori abil: pre (eeltingimus), post (pĂ€rast tingimus) ja contract_assert (vĂ€idete kontroll). Operaator «pre» mÀÀratleb eeltingimused, mis peavad olema tĂ€idetud enne vĂ€ljakutset (sisendi kontroll); «post» â tingimused, mis peavad olema tĂ€idetud pĂ€rast tĂ€itmist (vĂ€ljundite nĂ”uded); contract_assert â erandite tekkimise tingimused. See funktsioon ilmub GCC 16-s.
- "template for" operaator elementide, nagu tuparametrid, tuple-le sarnased objektid ja refleksiooni tulemused (metaobjektid), iteratiivseks töötlemiseks kompileerimise etapis tavapĂ€rases tsĂŒklis. TĂ€itmisel "template for" avab tsĂŒkli keha iga elemendi jaoks ja iga iteratsioon töödeldakse eraldi nĂ€htavuses, kus tsĂŒklis iteratsiooniks olev sekundi element on igas iteratsioonis konstant ning saab osaleda konstantsetes vĂ€ljendites (constexpr). Refleksiooni kontekstis saab "template for" kasutada klasside vĂ”i enumide 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.
- C++23 standardiga seotud vĂ”imaluste tĂ€iendamine, nagu objektide eluaja selge juhtimine ja diagnostiliste sĂ”numite sĂŒmbolite kodeeringu mÀÀramine.
- C23 standard support has been expanded, for example, the ability to use the "counted_by" attribute for checking the correctness of pointer usage has been implemented.
- The implementation of OpenMP 5.0, 5.1, 5.2, and 6.0 (Open Multi-Processing) standards continues, defining APIs and methods for applying parallel programming techniques on multi-core and hybrid (CPU+GPU/DSP) systems with shared memory and SIMD vectorization blocks. The implementation of OpenACC 3.0, 3.3, and 3.4 parallel programming specifications, which define means for offloading operations to GPUs and specialized processors such as NVIDIA PTX, has been improved.
- 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: opennet.ru
