Pas një viti zhvillimi u publikua lëshimi i setit 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. Sipas skemës së numërimit të lëshimeve, versioni 16.0 u përdor gjatë zhvillimit, dhe pak përpara lëshimit të GCC 16.1 tashmë është degëzuar ajo GCC 17.0, mbi të cilën do të formohet lëshimi i ardhshëm i rëndësishëm GCC 17.1.
Main ndryshime:
- Mënyra e zakonshme për gjuhën C++ është ndryshuar për të përdorur standardin C++20 (dialekti GNU C++20, -std=gnu++20) në vend të asaj që ishte ofruar më parë C++17. Zbatimi 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 kompaktimin e programeve në gjuhën e programimit Algol 68.
- Shtuar mundësia për të output-uar informacionin diagnostik në formatin HTML. Informacioni mbi zhvillimin e programit është zgjeruar, duke u përfshirë në output-in diagnostik në formatin SARIF, i bazuar në JSON (mbështetje për «-fdiagnostics-format=json» është ndërprerë).
- Zgjeruar optimizimet në fazën e lidhjes (LTO, Link-Time Optimization). Shtuar opsioni «-flto-toplevel-asm-heuristics», i cili përfshin heuristikën për të përmirësuar optimizimin e kodit me përfshirje assembly. Teknikat e devirtuazimit spekulativ (-fdevirtualize-speculatively) tani nuk janë të kufizuara në transformimin e metodave virtuale dhe mund të aplikohen gjatë transformimit në thirrje direkte nga çdo thirrje indirekte të funksioneve, për shembull, thirrjet përmes treguesve.
- Implementuar mbështetje për vektorizimin e cikleve, për të cilat në fazën e kompaktimit numri i iteracioneve nuk dihet. Rritet efikasiteti i përpunimit të daljeve të parakohshme nga cikli (për shembull, përmes break).
- ĂshtĂ« shtuar mbĂ«shtetje eksperimentale shumĂ« mundĂ«sitĂ« standardit tĂ« miratuar recently C++26. PĂ«r shembull, janĂ« implementuar:
- Reflektimi (Reflection, «-freflection»), e cila lejon ndjekjen dhe modifikimin e elementeve tĂ« programit nĂ« fazĂ«n e kompaktimit. Shtuar operatorĂ«t e rinj «^^ (open-std.org)» pĂ«r marrjen e meta-informacionit mbi strukturĂ«n gramatikore dhe «[:âŠ:]» pĂ«r tĂ« kryer transformimin e kundĂ«rt. PĂ«r transformimin dhe pĂ«rpunimin e informacionit tĂ« marrĂ« gjatĂ« inspektimit ofrohet biblioteka std::meta dhe janĂ« tĂ« disponueshme mundĂ«si tĂ« tilla si llogaritjet me konstanta.
- Programimi kontraktual (Contracts), duke lejonĂ« tĂ« pĂ«rcaktohen spekifikimet formale tĂ« ndĂ«rfaqeve pĂ«rmes tre operatorĂ«ve tĂ« rinj: pre (parakusht), post (postkusht) dhe contract_assert (kontrolli i pohimit). Operator âpreâ pĂ«rcakton kushtet e mĂ«parshme qĂ« duhet tĂ« plotĂ«sohen para thirrjes (kontrolli i tĂ« dhĂ«nave tĂ« hyrjes); âpostâ Ă«shtĂ« kushti qĂ« duhet tĂ« respektohet pas ekzekutimit (kĂ«rkesat pĂ«r tĂ« dhĂ«nat e daljes); contract_assert â kushtet pĂ«r ndodhitĂ« e pĂ«rjashtimeve. Kjo mundĂ«si do tĂ«Ò« Ă«shtĂ« e disponueshme nĂ« GCC 16.
- Operatori âtemplate forâ pĂ«r ciklimin e elementeve, si paketat e parametrave, objekte qĂ« ngjasojnĂ« me tuple 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 zgjerohet pĂ«r çdo element dhe çdo iteracion trajtohet nĂ« njĂ« hapĂ«sirĂ« tĂ« veçantĂ«, ku elementi i sekuencĂ«s, mbi tĂ« cilĂ«n bazohet cikli Ă«shtĂ« njĂ« konstant pĂ«r çdo iteracion dhe mund tĂ« marrĂ« pjesĂ« nĂ« shprehjet konstante (constexpr). NĂ« kontekstin e refleksionit, âtemplate forâ mund tĂ« pĂ«rdoret pĂ«r tĂ« kaluar mbi pronat e klasave apo enumerimeve.
- Biblioteka std::simd për paralelizimin e ekzekutimit të operacioneve mbi të dhëna me ndihmën e grupeve të instruksioneve SIMD, si AVX-512 dhe NEON, duke përdorur sistemin standard të tipave C++.
- Bibliotekat std::inplace_vector, std::optional<T&>, std::copyable_function, std::function_ref, std::indirect, std::polymorphic dhe std::owner_equal.
- Janë zbatuar mundësitë e lidhura me standardin C++23, si shprehimisht menaxhimi i jetës së objekteve dhe mbështetje caktimi i kodimit të simboleve në mesazhet diagnostike.
- ĂshtĂ« zgjeruar mbĂ«shtetje pĂ«r standardin C23 (opennet.ru), pĂ«r shembull, Ă«shtĂ« zbatuar mundĂ«sia e pĂ«rdorimit tĂ« atributit âcounted_byâ pĂ«r tĂ« verifikuar pĂ«rdorimin e saktĂ« tĂ« treguesve.
- Ka vazhduar realizimi i standardeve OpenMP 5.0, 5.1, 5.2 dhe 6.0 (Open Multi-Processing), përcaktojnë API dhe mënyrat e aplikimit të metodave të programimit paralel në sisteme me shumë bërthama dhe hibride (CPU+GPU/DSP) me memorie të përbashkët dhe blloqe vektorizimi (SIMD). simulimit të çrregullimeve të perceptimit të ngjyrave. Simulimi i dykromacisë protanopike, deuteranopike dhe tritanopike është hequr. realizimi i specifikimeve të programimit paralel OpenACC 3.0, 3.3 dhe 3.4, të cilat përcaktojnë mjete për nxjerrjen (offloading) të operacioneve në GPU dhe procesorë të specializuar, si NVIDIA PTX.
- Në backend për arkitekturën x86 është shtuar mbështetje për procesorët AMD të 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ë implementuar mbështetje për aceleratorët AMD Instinct MI300 (gfx942).
- Për arkitekturë RISC-V, ARM, S/390 dhe LoongArch është implementuar 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
