Pas një vit zhvillimi, është publikuar lirimi i paketës së lirë të kompilatorëve GCC 13.1, një lëshim i parë i rëndësishëm në degën e re GCC 13.x. Në përputhje me skemën e re të numërimit të lëshimeve, versioni 13.0 u përdor gjatë procesit të zhvillimit, ndërsa pak para publikimit të GCC 13.1 është ndarë dega GCC 14.0, mbi të cilën do të formohet lëshimi i ardhshëm i rëndësishëm GCC 14.1.
Ndryshimet kryesore:
- Në GCC është pranuar frontend për ndërtimin e programeve në gjuhën e programimit Modula-2. Mbështetet ndërtimi i kodit, që i përket dialekteve PIM2, PIM3 dhe PIM4, si dhe standardit ISO të pranuar për këtë gjuhë.
- Në pemën e kodit burimor të GCC është shtuar një frontend me implementimin e kompilatorit të gjuhës Rust, i përgatitur nga projekti gccrs (GCC Rust). Në formën aktuale, frontend-i është shënuar si eksperimental dhe është i çaktivizuar si parazgjedhje. Pas përfundimit të gatishmërisë së frontend-it (pritet në lëshimin e ardhshëm), mjetet standarde të GCC do të mund të përdoren për kompilimin e programeve në gjuhën Rust pa qenë e nevojshme instalimi i kompilatorit rustc, i ndërtuar duke përdorur burimet e LLVM.
- NĂ« mekanizmin e optimizimit nĂ« fazĂ«n e lidhjes (LTO) Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r serverin e menaxhimit tĂ« punĂ«ve (jobserver), mbĂ«shtetur nga projekti GNU make pĂ«r optimizimin e ekzekutimit tĂ« ndĂ«rtimit paralel nĂ« disa procese. NĂ« GCC, jobserver pĂ«rdoret pĂ«r tĂ« paralelizuar punĂ«t gjatĂ« optimizimit LTO nĂ« kontekstin e tĂ« gjithĂ« programit (WPA, Whole-program Analysis). PĂ«r ndĂ«rveprimin me jobserver, si parazgjedhje pĂ«rdoren kanalet me emĂ«r (âjobserver-style=fifo).
- Në analizuesin static (-fanalyzer) janë propozuar 20 kontrolle të reja diagnostike, përfshirë "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer-infinite-recursion", "-Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
- ĂshtĂ« implementuar mundĂ«sia e pĂ«rfundimit tĂ« diagnostikĂ«s nĂ« formatin SARIF, i bazuar nĂ« JSON. Formati i ri mund tĂ« pĂ«rdoret pĂ«r tĂ« marrĂ« rezultatet e analizĂ«s statike (GCC -fanalyzer), si dhe pĂ«r tĂ« marrĂ« informacionet mbi paralajmĂ«rimet dhe gabimet. Aktivizimi bĂ«het nĂ«pĂ«rmjet opsionit "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", ku opsionet me "json" çojnĂ« nĂ« shkarkimin nĂ« variantin specifik tĂ« formatit JSON pĂ«r GCC.
- Janë implementuar disa mundësi të përcaktuara në standardin e gjuhës C23, si konstanta nullptr për përcaktimin e pointerëve null, thjeshtimi i përdorimit të listave me numër variabël argumentesh (variadic), zgjerimi i mundësive të enumeratoreve, atributi noreturn, leja e përdorimit të constexpr dhe auto gjatë përcaktimit të objekteve, operatorët typeof dhe typeof_unqual, fjalët e reja kyçe alignas, alignof, bool, false, static_assert, thread_local dhe true, dhe leja për të specifikuar kllapa të zbrazëta gjatë inicializimit.
- JanĂ« implementuar disa mundĂ«si tĂ« pĂ«rcaktuara nĂ« standardin C++23, si mundĂ«sia e vendosjes sĂ« etiketave nĂ« fund tĂ« shprehjeve tĂ« pĂ«rbĂ«ra, pĂ«rputhshmĂ«ria me tipin char8_t, direktiva e preprocessorit #warning, sekuencat e escape tĂ« ndara (\u{}, \o{}, \x{}) dhe tĂ« emĂ«ruar (â\N{LATIN CAPITAL LETTER A}â), static operator(), static operator[], operatori i barazisĂ« brenda shprehjeve, pĂ«rjashtimi i disa kufizimeve mbi pĂ«rdorimin e constexpr, mbĂ«shtetje pĂ«r UTF-8 nĂ« tekstet burimore.
- Në libstdc++ është përmirësuar mbështetja eksperimentale për standardet C++20 dhe C++23, për shembull, është shtuar mbështetja për skedarin me emër <format> dhe std::format, janë zgjeruar mundësitë e skedarit me emër <ranges>, janë shtuar tipe të tjerë me pikë flotante dhe janë implementuar skedarët me emër <experimental/scope> dhe <experimental/synchronized_value>.
- Janë shtuar atributet e reja të funksioneve për dokumentimin se në një varg të plotë integer dërgohet një identifikues skedari: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" dhe "__attribute__((fd_arg_write(N)))". Atributet e përmendura mund të përdoren në analizuesin static (-fanalyzer) për të identifikuar funksionimin e papërshtatshëm me identifikuesit e skedarit.
- ĂshtĂ« shtuar njĂ« atribut i ri "__attribute__((assume(EXPR)))", me anĂ« tĂ« cilit mund tâi tregoni kompilatorit qĂ« shprehja Ă«shtĂ« e vĂ«rtetĂ« dhe kompilatori mund ta pĂ«rdorĂ« kĂ«tĂ« fakt pa e llogaritur shprehjen.
- ĂshtĂ« shtuar flagu "-fstrict-flex-arrays=[level]" pĂ«r tĂ« zgjedhur sjelljen gjatĂ« trajtimit tĂ« elementeve fleksibĂ«l tĂ« vargjeve nĂ« struktura (Flexible Array Members, varg me madhĂ«si tĂ« paqartĂ« nĂ« fund tĂ« strukturĂ«s, si "int b[]").
- ĂshtĂ« shtuar flagu "-Wenum-int-mismatch" pĂ«r tĂ« dhĂ«nĂ« paralajmĂ«rime nĂ« rast tĂ« mospĂ«rputhjes midis tipit enum dhe tipit tĂ« plotĂ«.
- Në frontend-in për gjuhën Fortran është realizuar mbështetje e plotë për finalizimin.
- Në frontend-in për gjuhën Go është shtuar mbështetje për funksione dhe tipe të përgjithshëm (gjenerikë), duke siguruar përputhshmërinë me paketat për gjuhën Go 1.18.
- NĂ« backendin pĂ«r arkitekturĂ«n AArch64 Ă«shtĂ« realizuar mbĂ«shtetje pĂ«r CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) dhe Arm Neoverse V2 (neoverse-v2). NĂ« opsionin "-march=" Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r argumentet "armv9.1-a", "armv9.2-a" dhe "armv9.3-a". ĂshtĂ« shtuar mbĂ«shtetje pĂ«r zgjerimet e procesorĂ«ve FEAT_LRCPC, FEAT_CSSC dhe FEAT_LSE2.
- Në backendin për arkitekturën ARM është shtuar mbështetje për CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) dhe Arm Cortex-M85 (cortex-m85).
- Në backendin për arkitekturën x86 është shtuar mbështetje për procesorët Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids, dhe gjithashtu për procesorët AMD Zen 4 (znver4). Janë realizuar zgjerimet e propozuara në procesorët Intel të arkitekturës së setit të komandave AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT dhe AMX-COMPLEX. Për gjuhët C dhe C++ në sisteme me SSE2 është ofruar tipi __bf16.
- NĂ« backendin e gjenerimit tĂ« kodit pĂ«r GPU AMD Radeon (GCN) Ă«shtĂ« realizuar mundĂ«sia e pĂ«rdorimit tĂ« pĂ«rshpejtuesve AMD Instinct MI200 pĂ«r tĂ« rritur performancĂ«n OpenMP/OpenACC. ĂshtĂ« pĂ«rmirĂ«suar vektorizimi duke pĂ«rdorur instrukcione SIMD.
- Janë zgjeruar ndjeshëm aftësitë e backendit për platformën LoongArch.
- NĂ« backendin pĂ«r arkitekturĂ«n RISC-V Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r CPU T-Headâs XuanTie C906 (thead-c906). ĂshtĂ« realizuar mbĂ«shtetje pĂ«r pĂ«rpunuesit vektorialĂ«, tĂ« pĂ«rcaktuar nĂ« specifikimin e Zgjerimit Vektorial RISC-V Intrinsic 0.11. ĂshtĂ« shtuar mbĂ«shtetje pĂ«r 30 zgjerime tĂ« specifikimeve RISC-V.
- Gjatë formimit të objekteve të përbashkëta me opsionin "-shared" është ndaluar shtimi i kodit të nisjes pas shtimit të ambientit për kalkulime me pikë fluturuese, nëse janë aktivizuar optimizimet "-Ofast", "-ffast-math" ose "-funsafe-math-optimizations".
- Mbështetje për formatin e debuggimit DWARF është realizuar në pothuajse të gjitha konfigurimet.
- ĂshtĂ« shtuar opsioni "-gz=zstd" pĂ«r kompresimin e informacionit tĂ« debuggimit duke pĂ«rdorur algoritmin Zstandard. ĂshtĂ« ndaluar mbĂ«shtetje pĂ«r modin e vjetĂ«r tĂ« kompresimit tĂ« informacionit tĂ« debuggimit "-gz=zlib-gnu".
- ĂshtĂ« shtuar mbĂ«shtetje fillestare pĂ«r OpenMP 5.2 (Open Multi-Processing) dhe Ă«shtĂ« vazhduar realizimi i standarteve OpenMP 5.0 dhe 5.1, tĂ« cilat pĂ«rcaktojnĂ« API dhe mĂ«nyrat e pĂ«rdorimit 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).
- ĂshtĂ« ndaluar mbĂ«shtetje pĂ«r formatin e vjetĂ«r tĂ« ruajtjes sĂ« informacionit tĂ« debuggimit "STABS" (i pĂ«fshirĂ« me opsionet -gstabs dhe -gxcoff), i krijuar nĂ« vitet 1980 dhe pĂ«rdorur nĂ« debugguesin dbx.
- ĂshtĂ« shpallur e vjetruar mbĂ«shtetja pĂ«r Solaris 11.3 (kodi pĂ«r mbĂ«shtetje tĂ« kĂ«saj platforme do tĂ« hiqet nĂ« lĂ«shimin e ardhshĂ«m).
Burimi: opennet.ru
