Pas një viti zhvillimi, është publikuar lëshimi i paketës së lirë të kompilatorëve GCC 16.1, lëshimi i parë domethënës në degën e re GCC 16.x. Sipas skemës së numrave të lëshimeve, versioni 16.0 u përdor gjatë zhvillimit, dhe pak para daljes së GCC 16.1, u shkëput dega GCC 17.0, mbi të cilën do të formohet lëshimi i ardhshëm domethënës GCC 17.1.
Ndryshimet kryesore:
- ReĆŸimi default pĂ«r gjuhĂ«n C++ Ă«shtĂ« kaluar nĂ« pĂ«rdorimin e standardit C++20 (dialekti GNU C++20, -std=gnu++20) nĂ« vend tĂ« C++17 qĂ« ishte ofruar mĂ« parĂ«. Implementimi i C++20 nĂ« bibliotekĂ«n standarde Ă«shtĂ« shpallur i qĂ«ndrueshĂ«m.
- Në paketë është përfshirë një front-end eksperimental ga68 për kompilerimin e programeve në gjuhën e programimit Algol 68.
- ĂshtĂ« shtuar mundĂ«sia e daljes sĂ« informacionit diagnostik nĂ« formatin HTML. Informacioni mbi ekzekutimin e programit Ă«shtĂ« zgjeruar, duke u pĂ«rfshirĂ« nĂ« daljen e diagnostikĂ«s nĂ« formatin SARIF, i bazuar nĂ« JSON (mbĂ«shtetje pĂ«r «-fdiagnostics-format=json» Ă«shtĂ« ndalur).
- Shtesat për optimizimin gjatë fazës së lidhjes (LTO, Link-Time Optimization) janë zgjeruar. Shtuar opsioni «-flto-toplevel-asm-heuristics», i cili përfshin heuristikën për përmirësimin e optimizimit të kodit me përfshirje assembler. Teknika e devvirtalizimit spekulativ (-fdevirtualize-speculatively) tani nuk është e kufizuar në transformimin e metodave virtuale dhe mund të aplikohet kur konvertohen në thirrje direkte të çdo thirrjeje indirekte, p.sh., thirrjeve 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.
- ĂshtĂ« shtuar mbĂ«shtetje eksperimentale pĂ«r shumĂ« mundĂ«si tĂ« standardit tĂ« sapo miratuar C++26. PĂ«r shembull, janĂ« zbatuar:
- Reflektimi (Reflection, «-freflection»), qĂ« lejon gjurmimin dhe modifikimin e elementeve tĂ« programit gjatĂ« fazĂ«s sĂ« kompajtimit. JanĂ« shtuar operatorĂ« tĂ« rinj «^^» pĂ«r marrjen e metainformacionit mbi konstrukcionin gramatikor dhe «[:âŠ:]» pĂ«r kryerjen e transformimit tĂ« kundĂ«rt. PĂ«r transformimin dhe pĂ«rpunimin e informacionit qĂ« Ă«shtĂ« marrĂ« gjatĂ« inspektimit, Ă«shtĂ« propozuar biblioteka std::meta dhe janĂ« tĂ« disponueshme mundĂ«si tĂ« tilla si llogaritjet me konstanta.
- Programimi kontraktual (Contracts), qĂ« lejon pĂ«rcaktimin e specifikimeve formale tĂ« interface-ve me anĂ« tĂ« tre operatorĂ«ve tĂ« rinj: pre (parakushte), post (pas kushte) dhe contract_assert (kontrolli i pohimeve). OperatorĂ«t «pre» pĂ«rcaktojnĂ« kushtet paraprake qĂ« duhet tĂ« pĂ«rmbushen para thirrjes (kontrolli i tĂ« dhĂ«nave tĂ« hyrjes); «post» â kushtet qĂ« duhet tĂ« respektohen pas ekzekutimit (kĂ«rkesat pĂ«r tĂ« dhĂ«nat e daljes); contract_assert â kushtet pĂ«r shfaqjen e pĂ«rjashtimeve. Kjo mundĂ«si do tĂ« shfaqet nĂ« GCC 16.
- Operatori «template for» për të përshkuar elementët, siç janë paketat e parametrave, objektet të ngjashme me tupla dhe rezultatet e refleksionit (metaobjekte), në fazën e kompilimit në stilin e një cikli të zakonshëm. Gjatë ekzekutimit të «template for», trupi i ciklit shpaloset për çdo element dhe çdo iterim procesi në një hapësirë të veçantë të dukshmërisë, ku elementi i sekuencës për të cilin iteron cikli është konstante për çdo iterim dhe mund të përfshihet në shprehje konstante (constexpr). Në kontekstin e refleksionit, «template for» mund të përdoret për të përshkuar pronat e klasave ose enumeracioneve.
- 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ë implementuar funksionalitete të lidhura me standardin C++23, si menaxhimi eksplicit i kohëzgjatjes së objekteve dhe mbështetje për specifikimin e kodimit të karaktereve të mesazheve diagnostikuese.
- ĂshtĂ« zgjeruar mbĂ«shtetje pĂ«r standardin C23, pĂ«r shembull, Ă«shtĂ« realizuar mundĂ«sia e pĂ«rdorimit tĂ« atributit "counted_by" pĂ«r kontrollin e saktĂ«sisĂ« sĂ« pĂ«rdorimit tĂ« treguesve.
- Ka 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ë metodave të programimit paralel në sisteme me shumë bërthama dhe hibrid (CPU+GPU/DSP) me memorie të përbashkët dhe blloqe vektorizimi (SIMD). Ka përmirësuar implementimin e specifikimeve të programimit paralel OpenACC 3.0, 3.3 dhe 3.4, që përcaktojnë mjetet për zhvendosjen (offloading) e operacioneve në GPU dhe procesorët e specializuar, si 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: opennet.ru
