Lëshimi i paketës së përpiluesit GCC 13

Pas një viti zhvillimi, lëshimi i paketës së përpiluesit falas GCC 13.1 është lëshuar, lëshimi i parë domethënës në degën e re GCC 13.x. Sipas skemës së re të numërimit të lëshimeve, versioni 13.0 u përdor gjatë zhvillimit, dhe pak para lëshimit të GCC 13.1, dega GCC 14.0 ishte tashmë e degëzuar, nga e cila do të formohet versioni tjetër domethënës i GCC 14.1.

Ndryshimet kryesore:

  • GCC miratoi një frontend për ndërtimin e programeve në gjuhën e programimit Modula-2. Ai mbështet kodin e ndërtimit që përputhet me dialektet PIM2, PIM3 dhe PIM4, si dhe standardin e pranuar ISO për atë gjuhë.
  • Një frontend me zbatimin e përpiluesit të gjuhës Rust të përgatitur nga projekti gccrs (GCC Rust) është shtuar në pemën burimore të GCC. Në pamjen aktuale, fortend është shënuar si eksperimental dhe i çaktivizuar si parazgjedhje. Pasi pjesa e përparme të jetë gati (pritet në versionin tjetër), paketa standarde e veglave GCC mund të përdoret për të përpiluar programet Rust pa pasur nevojë të instaloni përpiluesin rustc të ndërtuar duke përdorur zhvillimet LLVM.
  • Optimizimi Link-në-Hapi (LTO) shton mbështetje për një server pune (jobserver) të mirëmbajtur nga projekti GNU make për të optimizuar ekzekutimin paralel të ndërtimit nëpër tema të shumta. Në GCC, serveri i punës përdoret për të paralelizuar punën gjatë optimizimit të LTO në kontekstin e të gjithë programit (WPA, Analiza e gjithë programit). Tubat e emërtuara (--jobserver-style=fifo) përdoren si parazgjedhje për të bashkëvepruar me serverin e punës.
  • Analizuesi statik (-fanalyzer) ofron 20 kontrolle të reja diagnostikuese, duke përfshirë "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-fore-check", "-Wanalyzer- infinite -rekursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Është zbatuar aftësia për të nxjerrë diagnostifikim në formatin SARIF bazuar në JSON. Formati i ri mund të përdoret për të marrë rezultate të analizës statike (GCC -fanalyzer), si dhe për të marrë informacion rreth paralajmërimeve dhe gabimeve. Aktivizimi bëhet me opsionin "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", ku opsionet me "json" rezultojnë në dalje në një variant specifik të GCC të formatit JSON .
  • Zbatoi disa veçori të përcaktuara në standardin C23 C, si konstanta nullptr për përcaktimin e treguesve null, duke e bërë më të lehtë përdorimin e listave me një numër të ndryshueshëm argumentesh (variadike), duke zgjeruar aftësitë e enums, atributin noreturn, duke lejuar përdorimin e Constexpr dhe auto gjatë përcaktimit të objekteve, tipiof dhe typeof_unqual, fjalë kyçe të reja alignas, alignof, bool, false, static_assert, thread_local dhe true, lejojnë kllapa boshe në inicializimin.
  • Zbatoi disa veçori të përcaktuara në standardin C++23, të tilla si aftësia për të vendosur shenja në fund të shprehjeve të përbëra, përputhshmëria me llojin char8_t, direktiva e paraprocesorit #warning, e kufizuar nga (\u{}, \o{} , \x{}), dhe të emërtuara ('\N{SHKRONJA KAPITALE A}') sekuenca ikjeje, operatori statik(), operatori statik[], operatori i barazisë brenda shprehjeve, me përjashtim të disa kufizimeve në përdorimin e constexpr, mbështetje për UTF-8 në tekstet burimore.
  • Mbështetje eksperimentale e përmirësuar për standardet C++20 dhe C++23 në libstdc++, si shtimi i mbështetjes së skedarit të kokës dhe std::format, aftësi të zgjeruara të skedarit të kokës , u shtuan lloje shtesë të pikës lundruese, u implementuan skedarët e kokës Dhe .
  • U shtuan atribute të reja funksioni për të dokumentuar që një përshkrues skedari kalohet në një ndryshore numër të plotë: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" dhe "__attribute__((fd_arg_write(N) ))". Atributet e specifikuara mund të përdoren në një analizues statik (-fanalyzer) për të zbuluar punën e gabuar me përshkruesit e skedarëve.
  • Është shtuar një atribut i ri "__attribute__((supozojmë(EXPR)))", me të cilin mund t'i thuash kompajlerit se shprehja është e vërtetë dhe përpiluesi mund ta përdorë këtë fakt pa e vlerësuar shprehjen.
  • U shtua flamuri "-fstrict-flex-arrays=[nivel]" për të zgjedhur sjelljen kur përpunohet një element i vargut fleksibël në struktura (Anëtarët fleksibël të grupit, një grup me madhësi të pacaktuar në fund të strukturës, për shembull, "int b[] ").
  • U shtua flamuri "-Wenum-int-mismatch" për të lëshuar paralajmërime nëse ka një mospërputhje midis një lloji të numëruar dhe një lloji të plotë.
  • Pjesa e përparme e Fortran ka mbështetje të plotë për finalizim.
  • Mbështetja për funksionet dhe llojet gjenerike (gjenerike) është shtuar në frontend për gjuhën Go dhe është siguruar përputhshmëria me paketat për gjuhën Go 1.18.
  • Mbështetja e AArch64 mbështet 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) . Mbështetja për argumentet "armv9.1-a", "armv9.2-a" dhe "armv9.3-a" është shtuar në opsionin "-march=". Mbështetje e shtuar për shtesat e procesorit FEAT_LRCPC, FEAT_CSSC dhe FEAT_LSE2.
  • Mbështetja për CPU-të STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) dhe Arm Cortex-M85 (cortex-m85) është shtuar në bazën e arkitekturës ARM.
  • Mbështetja për procesorët Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids dhe AMD Zen 86 (znver4) është shtuar në backendin x4. Shtesat e arkitekturës së grupit të udhëzimeve AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT dhe AMX-COMPLEX të propozuara në procesorët Intel janë zbatuar. Për C dhe C++ në sistemet me SSE2, ofrohet lloji __bf16.
  • Mbështetja e gjenerimit të kodit për GPU-të AMD Radeon (GCN) zbaton aftësinë për të përdorur përshpejtuesit AMD Instinct MI200 për të përmirësuar performancën OpenMP/OpenACC. Vektorizimi i përmirësuar duke përdorur udhëzimet SIMD.
  • Zgjeruar ndjeshëm aftësitë mbështetëse për platformën LoongArch.
  • Mbështetje e shtuar për XuanTie C906 të CPU T-Head (thead-c906) në pjesën e pasme RISC-V. Mbështetje e zbatuar për mbajtësit e vektorëve të përcaktuar në specifikimin RISC-V Vector Extension Intrinsic 0.11. Mbështetje e shtuar për 30 shtesa të specifikimeve RISC-V.
  • Kur gjenerohen objekte të përbashkëta me opsionin "-shared", kodi i nisjes nuk shtohet më pas shtimit të një mjedisi me pikë lundruese nëse janë aktivizuar optimizimet "-Ofast", "-fast-math" ose "-funsafe-math-optimizations". .
  • Mbështetja për formatin e korrigjimit DWARF zbatohet pothuajse në të gjitha konfigurimet.
  • U shtua opsioni "-gz=zstd" për të kompresuar informacionin e korrigjimit duke përdorur algoritmin Zstandard. U hoq mbështetja për modalitetin e vjetëruar të kompresimit të informacionit të korrigjimit "-gz=zlib-gnu".
  • Mbështetja fillestare për OpenMP 5.2 (Open Multi-Processing) është shtuar dhe zbatimi i standardeve OpenMP 5.0 dhe 5.1 ka vazhduar, duke përcaktuar API-të dhe metodat për aplikimin e metodave të programimit paralel në sistemet me shumë bërthama dhe hibride (CPU + GPU / DSP) me memorie të përbashkët dhe njësi vektorizimi (SIMD).
  • Mbështetja për formatin e vjetër të ruajtjes së informacionit të korrigjimit "STABS" (i aktivizuar nga opsionet -gstabs dhe -gxcoff), i krijuar në vitet 1980 dhe i përdorur në korrigjuesin dbx, është ndërprerë.
  • Mbështetja e vjetëruar për Solaris 11.3 (kodi për të mbështetur këtë platformë do të hiqet në një version të ardhshëm).

Burimi: opennet.ru

Shto një koment