Pas një viti zhvillimi, u publikua lëshimi i paketës së lirë të kompilatorëve GCC 15.1, e para version i rëndësishëm në degën e re GCC 15.x. Në përputhje me skemën e numerimit të lirimeve, versioni 15.0 u përdor gjatë procesit të zhvillimit, dhe pak para daljes së GCC 15.1, u shkëput dega GCC 16.0, mbi të cilën do të formohet lëshimi i ardhshëm i rëndësishëm GCC 16.1.
Ndryshimet kryesore:
- Kur kompilohet programe në gjuhën C, standardi C23 (pasqyrë e ndryshimeve) me zgjatjet GNU ('-std=gnu23') aktivizohet si standard i paracaktuar. Më parë, standardi i paracaktuar ishte C17 - ('-std=gnu17'). Ky ndryshim potencialisht mund të sjellë probleme gjatë ndërtimit të projekteve ekzistuese për shkak të përfshirjes së konstantës nullptr, tipit _BitInt(n) dhe fjalëve kyçe bool, true dhe false, të cilat mund të bien në konflikt me identifikuesit me emra të njëjtë të caktuar në aplikacione.
- Janë realizuar mundësitë e standartit C23:
- Direktiva '#embed', e cila është e destinuar për të përfshirë burime binar në kod.
- Atributi 'unsequenced', i cili tregon se rezultati nuk varet nga rendi i ekzekutimit.
- Atributi "reproducible", që tregon se funksioni gjithmonë kthen të njëjtin rezultat për të njëjtat të dhëna hyrëse, dmth, nuk varet nga faktorë të tjerë.
- Janë realizuar elementët e standardit të ardhshëm C2Y (-std=c2y dhe -std=gnu2y):
- MundĂ«sia pĂ«r tĂ« shpallur variabla nĂ« operatorin "if", pĂ«r shembull, "if (int x = get ()) {âŠ}".
- Mbështetje për caktimin e emrave për ciklet në mënyrë që të referoheni në to në kod. outer: for (int i = 0; i < IK; ++i) { switch (i) { case 1: break; // kalon në CONT1 case 2: break outer; // kalon në CONT2 } // CONT1 } // CONT2
- Mbështetje për caktimin e intervaleve të vlerave të plota në shprehjet "case", për shembull, "case 1 ⊠10:".
- Sufikset "i" dhe "j" për të treguar pjesën imagjinare në numrat kompleks.
- MundĂ«sia pĂ«r tĂ« pĂ«rdorur operatorĂ«t "++" dhe "â" me numra kompleks.
- Konstrukt "_Generic(type, expr1, expr2, âŠ)" pĂ«r tĂ« zgjedhur shprehjen nĂ« bazĂ« tĂ« llojit tĂ« operandit.
- Mbështetje për aksesin në arrays bajtesh si në tipa të tjerë objektesh, si struktura dhe bashkime.
- Mbështetje për aplikimin e operatorit "alignof" në arrays të paplota (të shpallura pa specifikuar madhësinë, për shembull, "int a[]").
- Shtohet sintaksĂ« e re pĂ«r sekuencat e karaktereve oktal, heksadeshimal dhe universale tĂ« escape. NĂ« vend tĂ« «\u», «\x» dhe «\nnn» â propozohet sekuencat «\u{}», «\o{}» dhe «\x{}», nĂ« tĂ« cilat mund tĂ« specifikoni njĂ« numĂ«r tĂ« çfarĂ«do shifrash.
- Funksionet e ndërtuara «__builtin_stdc_rotate_left» dhe «__builtin_stdc_rotate_right».
- Lejohen operacionet me gjatësi zero në treguesit NULL (p.sh., «sizeof(*p)»).
- Në front-end për gjuhën C++ janë realizuar mundësitë që po zhvillohen për standartin e ardhshëm C++26:
- Operatori variativ «friend» («friend TsâŠÂ»).
- Mundësia e përdorimit të fjalës kyçe «constexpr» me llojin e operatorit «new» (placement new) për vendosjen e një objekti në memorie të ndarë në kohën e kompilimit.
- Shfaqja e një gabimi kur fshihen treguesit në një tip të papërfunduar.
- Deklarimi i sintaksĂ«s sĂ« vjetruar pĂ«r pĂ«rcaktimin e parametrave variativĂ« me pika pa njĂ« presje tĂ« mĂ«parshme (p.sh., kur spesifikohet «void e(intâŠ)» nĂ« vend tĂ« «void e(int, âŠ)»).
- Indeksimi i paketës së parametrave në shabllone.
- Atributet për lidhje të strukturuara;
- Sintaksa â= delete(«arsye»)â;
- Përfshirja e «@», «$» dhe «`» në grupin bazë të simboleve.
- Përdorimi i makroseve për shpalljen e moduleve është i ndaluar.
- Mundësia e aplikimit të lidhjes së strukturuar (structured binding) si kusht në operatorët if dhe switch.
- ë suporti i krahasimit të drejtpërdrejtë të grupeve është ndërprerë (p.sh., «int arr1[5]; int arr2[5]; bool same = arr1 == arr2»).
- Mekanizmi «#embed» për integrimin e burimeve binarë.
- Klasa model is_trivial është shpallur e vjetruar.
- Janë shtuar mundësitë e C++23:
- Ndalohet disa aplikime të direktivës «export» dhe lejohet përdorimi i «export {}».
- Mbështetje për zgjatjen e jetës së objekteve të përkohshme në ciklet «for», që përshkruajnë diapazone.
- Në bibliotekën libstdc++ është realizuar mbështetje eksperimentale për modulët std dhe std.compat.
- Përdorimi i inicializuesit «{0}» për bashkime në kodin C dhe C++ tani nuk garanton pastrimin e të gjithë përmbajtjes, por çon në zerozimin e elementit të parë të bashkimit. Për pastrimin e gjithë bashkimit, duhet të përdoret shprehja «{}», e përcaktuar në specifikimin C23, ose të specifikohet opsioni «-fzero-init-padding-bits=unions» për rikthimin e sjelljes së mëparshme.
- ĂshtĂ« implementuar mbĂ«shtetje pĂ«r atributin «musttail» ([[gnu::musttail]] dhe [[clang::musttail]]) pĂ«r thirrje tĂ« garantuara tail. Atributi aplikohet nĂ« shprehjet e kthimit, ku bĂ«het thirrje rekurzive nĂ« funksionin aktual, dhe siguron qĂ« njĂ« thirrje e tillĂ« do tĂ« pĂ«rdorĂ« rekurzionin tail, ku nuk alokohet memorie shtesĂ« nĂ« stack (pĂ«rjashton rrezikun e shterimit tĂ« memories nĂ« rastin e njĂ« numri shumĂ« tĂ« madh thirrjesh).
- ĂshtĂ« implementuar mbĂ«shtetje pĂ«r atributin flag_enum ([[gnu::flag_enum]] dhe [[clang::flag_enum]]), i aplikuar nĂ« enumerations pĂ«r tĂ« treguar se pĂ«rmbajtja pĂ«rdoret nĂ« operacione bitesh (pĂ«rjashton daljen e paralajmĂ«rimeve nĂ« mĂ«nyrĂ«n «-Wswitch».
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r atributin «counted_by», pĂ«rmes tĂ« cilit mund tĂ« specifikoni njĂ« fushĂ« nĂ« njĂ« strukturĂ« me njĂ« varg fleksibĂ«l, e cila pĂ«rcakton numrin e elementĂ«ve. Atributi mund tĂ« pĂ«rdoret pĂ«r tĂ« pĂ«rmirĂ«suar efikasitetin e kontrollit tĂ« daljes nga kufiri i memories.
- Për funksionet është shtuar atributi «nonnull_if_nonzero», i cili përcakton se disa parametra të funksionit me tregues mund të pranojnë vlerën NULL, vetëm nëse një parametr tjetër është i barabartë me zero.
- ĂshtĂ« e lejuar pĂ«rdorimi i futjeve tĂ« pĂ«rparuar tĂ« asambleve «asm (âŠ)» jashtĂ« funksioneve. NĂ« futjet e asambleve Ă«shtĂ« e lejuar tĂ« ri-shkruhet memoria nĂ« zonĂ«n e kuqe tĂ« kufirit (zona nĂ« krye tĂ« stack-ut).
- Kompilimi i kodit në C++ është përshpejtuar falë përmirësimit të hashing-ut të modeleve.
- JanĂ« shtuar optimizime tĂ« reja. ĂshtĂ« e mundur mbĂ«shtetje e vektorizimit tĂ« cikleve qĂ« pĂ«rmbajnĂ« kod pĂ«r dalje tĂ« parakohshme (pĂ«r shembull, pĂ«rmes thirrjes tĂ« break ose return), madje edhe nĂ«se ciklet e tilla manipulojnĂ« me arrays ose bufra qĂ« janĂ« dinamike dhe kuadri i tyre nuk dihet nĂ« momentin e kompilimit. NĂ«se ceket opsioni «-O2», Ă«shtĂ« aktivizuar vektorizimi i disa cikleve qĂ« janĂ« lehtĂ«sisht tĂ« vektorizueshme, pĂ«r tĂ« cilat mungojnĂ« informacionet mbi numrin e iteracioneve (tripcount).
- ĂshtĂ« shtuar njĂ« modalitet i optimizimit inkremental nĂ« fazĂ«n e lidhjes (LTO, Link-Time Optimization), qĂ« zvogĂ«lon ndjeshĂ«m kohĂ«n e ri-kompilimit kur pĂ«rdoret LTO nĂ« situata ku janĂ« bĂ«rĂ« ndryshime tĂ« vogla nĂ« kod (ndryshohet njĂ« funksion). PĂ«r tĂ« aktivizuar modalitetin inkremental Ă«shtĂ« propozuar opsioni «-flto-incremental».
- ĂshtĂ« pĂ«rmirĂ«suar pĂ«rpunimi i skedave shumĂ« tĂ« mĂ«dha tĂ« hyrjes. ĂshtĂ« implementuar ndjekja e numrave tĂ« kolonave qĂ« kalojnĂ« 4096. ĂshtĂ« rritur saktĂ«sia e pĂ«rcaktimit tĂ« vendndodhjes sĂ« gabimeve dhe paralajmĂ«rimeve nĂ« skedarĂ«t shumĂ« tĂ« mĂ«dhenj.
- ĂshtĂ« rritur qartĂ«sia e raporteve gjatĂ« diagnostikimit tĂ« problemeve. PĂ«r shembull, Ă«shtĂ« siguruar shĂ«nimi i vendit ku ndodhi problemi me simbolin «â ïžÂ», Ă«shtĂ« ndryshuar kompozimi i daljes gjatĂ« gabimeve nĂ« shabllonet C++, janĂ« shtuar sugjerime pĂ«r tĂ« lehtĂ«suar kalimin nĂ« standardin C23, Ă«shtĂ« ribĂ«rĂ« skema e ngjyrave. ĂshtĂ« shtuar mundĂ«sia e nxjerrjes sĂ« diagnostikĂ«s nĂ« formatin Sarif (-fdiagnostics-format=sarif-file).
- ĂshtĂ« realizuar biblioteka libgdiagnostics, e cila lejon integrimin nĂ« projektet tuaja tĂ« mundĂ«sive tĂ« GCC tĂ« lidhura me formatimin e mesazheve diagnostike (pĂ«r shembull, mund tĂ« angazhohen mjete cituese, theksimi dhe sugjerime pĂ«r rregullimin).
- Shtohen paralajmërimet «-Wtrailing-whitespace» dhe «-Wleading-whitespace» për identifikimin e hapësirave të mbetura në fund të linjave dhe hapësirave të tepruara në fillim të linjave.
- ĂshtĂ« shtuar paralajmĂ«rimi «-Wheader-guard» pĂ«r tĂ« informuar mbi problemet nĂ« makrosat e mbrojtjes sĂ« skedarĂ«ve, tĂ« cilat parandalojnĂ« pĂ«rfshirjen e pĂ«rsĂ«ritur tĂ« skedarit tĂ« titullit.
- Frontend për gjuhën D është përditësuar në versionin 2.111.0.
- Në frontend për gjuhën Fortran është shtuar mbështetje për numra të plotë të paemërtuar.
- NĂ« pĂ«rbĂ«rje Ă«shtĂ« pĂ«rfshirĂ« njĂ« kompilator pĂ«r gjuhĂ«n COBOL â gcobol, qĂ« mbĂ«shtet platforma x86-64 dhe AArch64, dhe nuk Ă«shtĂ« projektuar pĂ«r pĂ«rdorim nĂ« sisteme 32-bit. Kompilatori implementon specifikimin ISO/IEC 1989:2023 dhe kalon shumicĂ«n e testeve NIST CCVS/85.
- Vazhdon implementimi i standardeve OpenMP 5.0, 5.1, 5.2 dhe 6.0 (Open Multi-Processing), që përcaktojnë API-të dhe mënyrat e aplikimit të metodave të programimit paralel në sisteme me shumë bërthamë dhe hibride (CPU+GPU/DSP) me memorie të përbashkët dhe blloqe vektorizimi (SIMD). është shtuar mbështetje për metadirektivat dhe konstrukcionet tile, unroll, interop dhe dispatch. Për disa GPU AMD dhe NVIDIA është shtuar mbështetje për memorie të ndarë të unifikuar (aktivizohet përmes përcaktimit unified_shared_memory në direktivën 'requires'). është shtuar mbështetje për shprehjen 'self_maps'.
- Në backend për arkitekturën AArch64 është shtuar mbështetje për platformën MinGW (aarch64-w64-mingw32). Janë realizuar më shumë se 20 zgjerime ARM8 dhe është përmirësuar mbështetje për zgjerimin ACLE (Arm C Language Extensions). Janë bërë shumë përmirësime në gjeneratorin e kodit. është shtuar mbështetje për CPU:
- Apple A12 (apple-a12)
- Apple M1 (apple-m1)
- Apple M2 (apple-m2)
- Apple M3 (apple-m3)
- Arm Cortex-A520AE (cortex-a520ae)
- Arm Cortex-A720AE (cortex-a720ae)
- Arm Cortex-A725 (cortex-a725)
- Arm Cortex-R82AE (cortex-r82ae)
- Arm Cortex-X925 (cortex-x925)
- Arm Neoverse N3 (neoverse-n3)
- Arm Neoverse V3 (neoverse-v3)
- Arm Neoverse V3AE (neoverse-v3ae)
- FUJITSU-MONAKA (fujitsu-monaka)
- NVIDIA Grace (grace)
- NVIDIA Olympus (olympus)
- Qualcomm Oryon-1 (oryon-1)
- Në backend-in e gjenerimit të kodit për GPU AMD Radeon (GCN) është implementuar mbështetje për bibliotekën libstdc++ dhe është shtuar mbështetje eksperimentale për gjenerimin e kodit për seritë e pajisjeve gfx9-generic, gfx10-3-generic dhe gfx11-generic.
- NĂ« backend-in pĂ«r arkitekturĂ«n x86 Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r zgjerimet e arkitekturĂ«s sĂ« setit tĂ« komandave Intel AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS. ĂshtĂ« added mbĂ«shtetje pĂ«r CPU Intel Diamond Rapids dhe Xeon Phi.
- Janë zgjeruar mundësitë e backend-eve për platformat LoongArch dhe AVR.
- Ă«shtĂ« hequr mbĂ«shtetja pĂ«r arkitekturĂ«n e target nios2, e cila pĂ«rdoret nĂ« procesorĂ«t Nios II. ĂshtĂ« shpallur e vjetruar dhe do tĂ« hiqet nĂ« lĂ«shimin e ardhshĂ«m tĂ« rĂ«ndĂ«sishĂ«m mbĂ«shtetja ABI ILP32 (-mabi=ilp32) nĂ« portin pĂ«r AArch64.
Burimi: opennet.ru
