Pas një vit zhvillimi është publikuar lëshimi i koleksionit të lirë të kompilatorëve GCC 16.1, lëshimi i parë i rëndësishëm në degën e re GCC 16.x. Në përputhje me skemën e numerimit të lëshimeve, versione 16.0 është përdorur gjatë procesit të zhvillimit, dhe pak përpara se të dilte GCC 16.1, tashmë është ndarë degë GCC 17.0, mbi të cilën do të formohet lëshimi i ardhshëm i rëndësishëm GCC 17.1.
Ndryshimet kryesore në:
- Rezhimi i parazgjedhur për gjuhën C++ është kalosur në përdorimin e standardit C++20 (-dialekti GNU C++20, -std=gnu++20) në vend të C++17. Zbatimi i C++20 në bibliotekën standarde është shpallur stabil.
- Në përmbajtje është përfshirë një front-end eksperimental ga68 për kompaktimin e programeve në gjuhën e programimit Algol 68.
- ĂshtĂ« shtuar mundĂ«sia e shfaqjes sĂ« informacionit diagnostik nĂ« formatin HTML. Informacioni mbi pĂ«rparimin e ekzekutimit tĂ« programit Ă«shtĂ« zgjeruar dhe pĂ«rfshihet kur jepet diagnostika nĂ« formatin SARIF, i bazuar nĂ« JSON (mbĂ«shtetje pĂ«r "-fdiagnostics-format=json" Ă«shtĂ« ndaluar).
- JanĂ« zgjeruar optimizimet gjatĂ« procesit tĂ« lidhjes (LTO, Link-Time Optimization). ĂshtĂ« shtuar mundĂ«sia "-flto-toplevel-asm-heuristics", e cila pĂ«rfshin heuristikĂ«n pĂ«r tĂ« pĂ«rmirĂ«suar optimizimin e kodit me inserte nĂ« asamblesĂ«. Teknikat e devijimit spekulativ (-fdevirtualize-speculatively) tani nuk janĂ« tĂ« kufizuara nĂ« transformimin e metodave virtuale dhe mund tĂ« pĂ«rdoren pĂ«r t'i kaluar direkt çdo thirrje funksionesh, pĂ«r shembull, thirrje pĂ«rmes treguesve.
- ĂshtĂ« zbatuar mbĂ«shtetje pĂ«r vektorizimin e cikleve pĂ«r tĂ« cilat numri i itereve nuk dihet nĂ« fazĂ«n e kompilimit. Efikasiteti nĂ« trajtimin e daljeve tĂ« parakohshme nga cikli (p.sh., pĂ«rmes break) Ă«shtĂ« rritur.
- Mbështetje eksperimentale e shtuar shumë mundësish standartit të miratuar kohët e fundit C++26. Për shembull, janë realizuar:
- Reflektimi (Reflection, "-freflection"), e cila lejon ndjekjen dhe modifikimin e elementeve tĂ« programit gjatĂ« fazĂ«s sĂ« kompilimit. JanĂ« shtuar operatorĂ« tĂ« rinj "^^ (open-std.org)" pĂ«r tĂ« marrĂ« metainformacione mbi konstrukcionin gramatikor dhe "[:âŠ:]" pĂ«r tĂ« kryer transformimin e kundĂ«rt. PĂ«r transformimin dhe pĂ«rpunimin e informacionit tĂ« marrĂ« gjatĂ« inspektimit, Ă«shtĂ« propozuar biblioteka std::meta dhe janĂ« tĂ« disponueshme mundĂ«si tĂ« tilla si llogaritjet me constante.
- Programimi për kontrata (Contracts), duke lejonë të përcaktojë specifikimet formale të ndërfaqeve duke përdorur tre operatorë të rinj: pre (parakusht), post (pasusht) dhe contract_assert (kontrolli i pohimit). Operator i «pre» përcakton kushtet paraprake që duhet të plotësohen para thirrjes (kontrolli i të dhënave hyrëse); «post» janë kushtet që duhet të respektohen pas ekzekutimit (të kërkesat për të dhënat dalëse); contract_assert janë kushtet për lindjen e përjashtimeve. Kjo mundësi do të jetë në GCC 16.
- Operatori «template for» për të kaluar nëpër elemente si paketat e parametrave, objekte të ngjashme me tuple dhe rezultatet e reflektimit (metaobjekte), në fazën e kompilimit në stilin e një cikli të zakonshëm. Gjatë ekzekutimit «template for» trupi i ciklit zgjerohet për çdo element dhe çdo iterim trajtohet në një hapësirë të veçantë të dukshmërisë, ku elementi i sekuencës, sipas të cilit iteron cikli, është konstant për çdo iterim dhe mund të marr pjesë në shprehje konstante (constexpr). Në kontekstin e reflektimit «template for» mund të aplikojë për kalimin e pronave të klasave ose enumerimeve.
- Biblioteka std::simd për të paralelizuar ekzekutimin e operacioneve mbi të dhënat përmes grupeve të instruktimeve SIMD, siç janë AVX-512 dhe NEON, duke përdorur sistemin standard të tipeve C++.
- Biblioteka std::inplace_vector, std::optional<T&>, std::copyable_function, std::function_ref, std::indirect, std::polymorphic dhe std::owner_equal.
- Janë realizuar mundësi të lidhura me standartin C++23, si evident menaxhimi i kohëzgjatjes së objekteve dhe mbështetje udhëzimeve për kodifikimin e mesazheve diagnostikuese.
- Mbështetje e zgjeruar për standardin C23 (opennet.ru), për shembull, është realizuar mundësia e përdorimit të atributit 'counted_by' për të verifikuar saktësinë e përdorimit të treguesve.
- Vazhduar implementimi i standardeve OpenMP 5.0, 5.1, 5.2 dhe 6.0 (Open Multi-Processing), që përcaktojnë API-të dhe metodat e aplikimit të teknikave tëprogramimit të paralelet në sisteme me shumë bërthama dhe hibride (CPU+GPU/DSP) me memorie të përbashkët dhe blloqet e vektorizimit (SIMD). E përmirësuar implementimi i specifikimeve të programimit të paralelet OpenACC 3.0, 3.3 dhe 3.4, që përcaktojnë mjete për të transferuar operacionet (offloading) në GPU dhe procesorë të specializuar, siç janë NVIDIA PTX.
- Në backend për arkitekturën x86 është shtuar mbështetje për procesorët AMD bazuar në mikroarkitekturën Zen6 (-march=znver6), si dhe procesorët Intel Wildcat Lake (-march=wildcatlake) dhe Nova Lake (-march=novalake).
- Në backend e gjenerimit të kodit për GPU AMD Radeon (GCN) është realizuar mbështetje për akceleratorët AMD Instinct MI300 (gfx942).
- Për arkitekturën RISC-V, ARM, S/390 dhe LoongArch është realizuar mbështetje për tipin "_BitInt (N)" për përcaktimin e numrave të plotë me numrin e specifikuar të bitëve.
Burimi: linux.org.ru
