Lëshimi i grupit të kompilatorëve GCC 15

Pas një vit zhvillimi, është publikuar lëshimi i paketës së kompilatorëve të lirë GCC 15.1, lëshimi i parë të rëndësishëm në degën e re GCC 15.x. Sipas skemës së numërimit të lëshimeve, versioni 15.0 është përdorur gjatë zhvillimit, dhe pak para lançimit të GCC 15.1, është shkëputur dega GCC 16.0, mbi të cilën do të formohet lëshimi i ardhshëm të rëndësishëm GCC 16.1.

Ndryshimet kryesore:

  • GjatĂ« kompilimit tĂ« programeve nĂ« gjuhĂ«n C, standardi C23 (pĂ«rmbledhja e ndryshimeve) me zgjerimet GNU („-std=gnu23“) Ă«shtĂ« aktivizuar si i parazgjedhur. MĂ« parĂ«, si i parazgjedhur pĂ«rdorej standardi 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, qĂ« mund tĂ« konfl iktojnĂ« me identifikatorĂ«t e njĂ«jtĂ« tĂ« caktuar nĂ« aplikacione.
  • JanĂ« realizuar mundĂ«sitĂ« e standardit C23:
    • Direktiva „#embed“, e cila Ă«shtĂ« e destinuar pĂ«r tĂ« pĂ«rfshirĂ« nĂ« kod burime binare.
    • Atributi „unsequenced“, qĂ« sinjalizon se rezultati nuk varet nga rendi i ekzekutimit.
    • Atributi „reproducible“, qĂ« tregon se funksioni gjithmonĂ« kthen tĂ« njĂ«jtin rezultat me tĂ« dhĂ«na hyrĂ«se tĂ« njĂ«jta, dmth, nuk varet nga faktorĂ« tĂ« tjerĂ«.
  • JanĂ« realizuar elementet e standardit tĂ« ardhshĂ«m C2Y (-std=c2y dhe -std=gnu2y):
    • MundĂ«sia pĂ«r shpalljen e variablave nĂ« operatorin „if“, pĂ«r shembull, „if (int x = get ()) {
}“.
    • MbĂ«shtetje pĂ«r emĂ«rtimin e cikleve pĂ«r t'u referuar 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Ă« numrave tĂ« plotĂ« nĂ« shprehjet „case“, pĂ«r shembull, „case 1 
 10:“.
    • Shtesat „i“ dhe „j“ pĂ«r tĂ« treguar pjesĂ«n imaginare nĂ« numrat kompleksĂ«.
    • MundĂ«sia pĂ«r tĂ« pĂ«rdorur operatorĂ«t „++“ dhe „—“ me numra kompleksĂ«.
    • Konstruksioni „_Generic(type, expr1, expr2, 
)“ pĂ«r tĂ« zgjedhur shprehjen nĂ« bazĂ« tĂ« tipit tĂ« operandit.
    • MbĂ«shtetje pĂ«r qasjen nĂ« vargje bajtĂ«sh si nĂ« tipe tĂ« tjera objektesh, siç janĂ« strukturat dhe unionet.
    • MbĂ«shtetje pĂ«r aplikimin e operatorit „alignof“ nĂ« vargje tĂ« paplota (tĂ« shpallura pa caktuar madhĂ«sinĂ«, pĂ«r shembull, „int a[]“).
    • Shtohen sintaksat e reja pĂ«r sekuencat e karaktereve nĂ« sistemet oktale, heksadecimale dhe universale. NĂ« vend tĂ« «\u», «\x» dhe «\nnn» — ofrohen sekuencat «\u{}», «\o{}» dhe «\x{}», ku mund tĂ« specifikoni njĂ« numĂ«r tĂ« pakufizuar shifrash.
    • Funksionet e ndĂ«rtuara «__builtin_stdc_rotate_left» dhe «__builtin_stdc_rotate_right».
    • Lejohen operacionet me gjatĂ«si zero nĂ« tregues NULL (p.sh., «sizeof(*p)»).
  • NĂ« frontend pĂ«r gjuhĂ«n C++ janĂ« implementuar mundĂ«si qĂ« po zhvillohen pĂ«r standardin e ardhshĂ«m C++26:
    • Operatori variativ «friend» («friend Ts »).
    • MundĂ«sia pĂ«r tĂ« pĂ«rdorur fjalĂ«n kyçe «constexpr» me llojin e operatorit «new» (placement new) pĂ«r tĂ« vendosur njĂ« objekt nĂ« memorie tĂ« rezervuar paraprakisht gjatĂ« kompilimit.
    • Shfaqja e njĂ« gabimi kur fshihet njĂ« tregues nĂ« njĂ« tip tĂ« papĂ«rfunduar.
    • Deklarimi i sintaksĂ«s pĂ«r pĂ«rcaktimin e parametrave variativĂ« me pikĂ« tĂ« shumĂ«fishta pa njĂ« presje paraprake Ă«shtĂ« shpallur i dhĂ«nĂ« pas. (pĂ«r shembull, kur shkruhet «void e(int...)» nĂ« vend tĂ« «void e(int, 
)»).
    • Indeksimi i paketĂ«s sĂ« parametrave nĂ« shabllone.
    • Atributet pĂ«r lidhjet e strukturuara;
    • Sintaksa ‘= delete(«arsye»)’;
    • PĂ«rfshirja e «@», «$» dhe «`» nĂ« grupin bazĂ« tĂ« simboleve.
    • PĂ«rdorimi i makrove pĂ«r deklarimin e moduleve Ă«shtĂ« i ndaluar.
    • MundĂ«sia e aplikimit tĂ« lidhjeve tĂ« strukturuara (structured binding) si kusht nĂ« operatorĂ«t if dhe switch.
    • PĂ«rfundimi i mbĂ«shtetjes pĂ«r krahasimin e drejtpĂ«rdrejtĂ« tĂ« arrave (p.sh., «int arr1[5]; int arr2[5]; bool same = arr1 == arr2»).
    • Mekanizmi «#embed» pĂ«r inkorporimin e burimeve binare.
    • Klasa template is_trivial Ă«shtĂ« shpallur e dhĂ«nĂ« pas.
  • Shtohen mundĂ«sitĂ« e C++23:
    • Ndalimi i disa aplikimeve tĂ« drejtorisĂ« «export» dhe leja pĂ«r pĂ«rdorimin e «export {}».
    • MbĂ«shtetje pĂ«r zgjatjen e jetĂ«s sĂ« objekteve kalimtare nĂ« ciklet «for» qĂ« iterojnĂ« mbi intervalet.
  • NĂ« biblioteka libstdc++ Ă«shtĂ« realizuar mbĂ«shtetje eksperimentale pĂ«r modulĂ«t std dhe std.compat.
  • PĂ«rdorimi i iniciatorit «{0}» pĂ«r bashkime nĂ« kodin C dhe C++ tani nuk garanton pastrimin e gjithĂ« pĂ«rmbajtjes, por çon nĂ« zerimin e elementit tĂ« parĂ« tĂ« bashkimit. PĂ«r pastrimin e tĂ« gjithĂ« bashkimit, duhet tĂ« pĂ«rdorim shprehjen «{}», e cila Ă«shtĂ« pĂ«rcaktuar nĂ« specifikimin C23, ose tĂ« specifikojmĂ« opsionin «-fzero-init-padding-bits=unions» pĂ«r tĂ« rikthyer sjelljen e vjetĂ«r.
  • ËshtĂ« realizuar mbĂ«shtetje pĂ«r atributin «musttail» ([[gnu::musttail]] dhe [[clang::musttail]]) pĂ«r thirrje tail tĂ« garantuara. Atributi aplikohet nĂ« shprehjet e kthimit, ku bĂ«het thirrje rekurzive nĂ« funksionin aktual, dhe garanton qĂ« njĂ« thirrje e tillĂ« do tĂ« pĂ«rdorĂ« rekurzion tail, pa alokuar memorie tĂ« shtuar nĂ« stack (shkĂ«put rrezikun e shterimit tĂ« memorie pĂ«r numra shumĂ« tĂ« mĂ«dhenj thirrjesh).
  • ËshtĂ« realizuar mbĂ«shtetje pĂ«r atributin flag_enum ([[gnu::flag_enum]] dhe [[clang::flag_enum]]), i cili pĂ«rdoret pĂ«r enumerimet pĂ«r tĂ« treguar qĂ« pĂ«rmbajtja pĂ«rdoret nĂ« operacione me bitĂ« (pĂ«rjashton nxjerrjen e paralajmĂ«rimeve nĂ« modalitetin "-Wswitch").
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r atributin "counted_by", pĂ«rmes tĂ« cilit mund tĂ« tregoni njĂ« fushĂ« nĂ« strukturĂ« me njĂ« array fleksibĂ«l, qĂ« pĂ«rcakton numrin e elementeve. Atributi mund tĂ« pĂ«rdoret pĂ«r tĂ« pĂ«rmirĂ«suar efikasitetin e kontrolleve tĂ« daljes pĂ«rtej tamponit.
  • PĂ«r funksionet Ă«shtĂ« shtuar atributi "nonnull_if_nonzero", i cili pĂ«rcakton se disa parametra tĂ« funksionit me tregues mund tĂ« marrin vlerĂ«n NULL vetĂ«m nĂ«se parametri tjetĂ«r Ă«shtĂ« zero.
  • ËshtĂ« lejuar pĂ«rdorimi i inkursionet tĂ« zgjeruara tĂ« assembler-it "asm (...)" jashtĂ« funksioneve. NĂ« inkursionet assembler Ă«shtĂ« lejuar rwrite e memories nĂ« zonĂ«n e kuqe tĂ« stack-ut (zona nĂ« majĂ« tĂ« stack-ut).
  • Kompilimi i kodit C++ Ă«shtĂ« pĂ«rshpejtuar falĂ« pĂ«rmirĂ«simit tĂ« hashing-ut pĂ«r shabllone.
  • JanĂ« shtuar optimizime tĂ« reja. ËshtĂ« realizuar mbĂ«shtetje pĂ«r vektorimin e cikleve, ku ka kod pĂ«r dalje tĂ« parakohshme (pĂ«r shembull, pĂ«rmes thirrjes break ose return), edhe nĂ«se kĂ«to cikle manipullojnĂ« array tĂ« ndarĂ« dinamikisht ose buferĂ«, tĂ« cilat kanĂ« njĂ« madhĂ«si tĂ« panjohur nĂ« fazĂ«n e kompilimit. Kur specifikohet opsioni "-O2", Ă«shtĂ« pĂ«rfshirĂ« vektorimi i disa cikleve tĂ« lehta pĂ«r vektorim, pĂ«r tĂ« cilat nuk ka informacione pĂ«r numrin e iteraioneve (tripcount).
  • ËshtĂ« shtuar njĂ« modalitet i optimizimit inkremental nĂ« fazĂ«n e lidhjes (LTO, Link-Time Optimization), duke reduktuar ndjeshĂ«m kohĂ«n e rikoimplimit kur pĂ«rdoret LTO nĂ« situata, ku janĂ« bĂ«rĂ« ndryshime tĂ« vogla nĂ« kod (ndryshuar njĂ« funksion). PĂ«r aktivizimin e modalitetit inkremental, ofrohet opsioni "-flto-incremental".
  • ËshtĂ« pĂ«rmirĂ«suar kompilimi i skedarĂ«ve shumĂ« tĂ« mĂ«dhenj tĂ« hyrjes. ËshtĂ« realizuar mbajtja e shenjave tĂ« kolonave qĂ« i 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Ă« diagnozave tĂ« problemeve. PĂ«r shembull, Ă«shtĂ« siguruar theksimi i vendit tĂ« shfaqjes sĂ« problemit me simbolin "⚠", Ă«shtĂ« ndryshuar disponimi i daljes gjatĂ« gabimeve nĂ« shabllonet C++, janĂ« shtuar kĂ«shilla pĂ«r tĂ« lehtĂ«suar kalimin nĂ« standard C23, Ă«shtĂ« riparuar skema e ngjyrave. ËshtĂ« shtuar mundĂ«sia e nxjerrjes sĂ« diagnozĂ«s nĂ« formatin Sarif (-fdiagnostics-format=sarif-file).
  • Librairia libgdiagnostics Ă«shtĂ« implementuar, e cila lejon integrimin e mundĂ«sive tĂ« GCC lidhur me formatimin e mesazheve diagnostike nĂ« projektet tuaja (p.sh., mund tĂ« shfrytĂ«zoni mjetet e citimeve, ndriçimit dhe sugjerimeve pĂ«r korrigjime).
  • JanĂ« shtuar paralajmĂ«rimet "-Wtrailing-whitespace" dhe "-Wleading-whitespace" pĂ«r identifikimin e hapĂ«sirave tĂ« mbetura nĂ« fundin e rreshtave dhe hapĂ«sirave tĂ« panevojshme nĂ« fillim tĂ« rreshtave.
  • NjĂ« paralajmĂ«rim "-Wheader-guard" Ă«shtĂ« shtuar pĂ«r tĂ« informuar pĂ«r problemet nĂ« makros pĂ«r mbrojtjen e skedarĂ«ve tĂ« titullit, duke parandaluar pĂ«rfshirjen e pĂ«rsĂ«ritur tĂ« skedarit tĂ« titullit.
  • Frontend-i pĂ«r gjuhĂ«n D Ă«shtĂ« pĂ«rditĂ«suar nĂ« versionin 2.111.0.
  • Frontend-i pĂ«r gjuhĂ«n Fortran tani pĂ«rfshin mbĂ«shtetje pĂ«r numra tĂ« plotĂ« pa nĂ«nshkrim.
  • Compiler pĂ«r gjuhĂ«n COBOL — gcobol, qĂ« mbĂ«shtet platformat x86-64 dhe AArch64, Ă«shtĂ« pĂ«rfshirĂ« nĂ« pĂ«rbĂ«rje dhe nuk Ă«shtĂ« menduar pĂ«r pĂ«rdorim nĂ« sisteme 32-bit. Compiler-i zbatohet specifikimin ISO/IEC 1989:2023 dhe kalon pjesĂ«n mĂ« tĂ« madhe tĂ« testeve NIST CCVS/85.
  • Zbatimi i standardeve OpenMP 5.0, 5.1, 5.2 dhe 6.0 (Open Multi-Processing) Ă«shtĂ« vazhduar, tĂ« cilat pĂ«rcaktojnĂ« API-tĂ« dhe mĂ«nyrat e aplikimit tĂ« metodave tĂ« programimit tĂ« paralel nĂ« sisteme me shumĂ« bĂ«rthama dhe hibride (CPU+GPU/DSP) me memorie tĂ« pĂ«rbashkĂ«t dhe blloqe tĂ« vektorimit (SIMD). JanĂ« 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 memorinĂ« e ndarĂ« tĂ« unifikuar (aktivizohet pĂ«rmes specifikimit tĂ« unified_shared_memory nĂ« direktivĂ«n "requires"). JanĂ« shtuar mbĂ«shtetje pĂ«r shprehjen "self_maps".
  • Backend-i pĂ«r arkitekturĂ«n AArch64 ka marrĂ« mbĂ«shtetje pĂ«r platformĂ«n MinGW (aarch64-w64-mingw32). JanĂ« implementuar mĂ« shumĂ« se 20 zgjerime ARM8 dhe Ă«shtĂ« pĂ«rmirĂ«suar mbĂ«shtetja pĂ«r zgjerimin ACLE (Arm C Language Extensions). JanĂ« kryer shumĂ« pĂ«rmirĂ«sime nĂ« gjenerimin e kodit. JanĂ« 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Ă« backendin 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 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Ă« shtuar 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 targetuar nios2, e pĂ«rdorur nĂ« procesorĂ«t Nios II. ËshtĂ« shpallur e vjetruar dhe do tĂ« hiqet nĂ« versionin e ardhshĂ«m tĂ« rĂ«ndĂ«sishĂ«m mbĂ«shtetja ABI ILP32 (-mabi=ilp32) nĂ« portin pĂ«r AArch64.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster