Lëshimi i paketës së kompilatorëve GCC 15

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

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster