Vydanie sady kompilátorov GCC 13

Po roku vývoja bola vydaná bezplatná súprava kompilátorov GCC 13.1, prvé významné vydanie v novej vetve GCC 13.x. Podľa novej schémy číslovania vydaní bola pri vývoji použitá verzia 13.0 a krátko pred vydaním GCC 13.1 už bola vetva GCC 14.0 rozvetvená, z ktorej sa vytvorí ďalšie významné vydanie GCC 14.1.

Hlavné zmeny:

  • GCC prijalo frontend na vytváranie programov v programovacom jazyku Modula-2. Podporuje stavebný kód, ktorý vyhovuje dialektom PIM2, PIM3 a PIM4, ako aj akceptovanému štandardu ISO pre tento jazyk.
  • Do zdrojového stromu GCC bol pridaný frontend s implementáciou kompilátora jazyka Rust pripraveného projektom gccrs (GCC Rust). V aktuálnom zobrazení je forntend označené ako experimentálne a predvolene vypnuté. Akonáhle je frontend pripravený (očakáva sa v ďalšom vydaní), štandardná sada nástrojov GCC sa môže použiť na kompiláciu programov Rust bez potreby inštalácie kompilátora rustc vytvoreného pomocou vývoja LLVM.
  • Link-in-Step Optimization (LTO) pridáva podporu pre server úloh (jobserver) udržiavaný projektom GNU make na optimalizáciu paralelného vykonávania zostavovania naprieč viacerými vláknami. V GCC sa jobserver používa na paralelizáciu práce počas optimalizácie LTO v kontexte celého programu (WPA, Whole-program Analysis). Na komunikáciu so serverom úloh sa štandardne používajú pomenované kanály (--jobserver-style=fifo).
  • Statický analyzátor (-fanalyzer) ponúka 20 nových diagnostických kontrol, vrátane "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinite" -recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Bola implementovaná možnosť výstupu diagnostiky vo formáte SARIF na základe JSON. Nový formát možno použiť na získanie výsledkov statickej analýzy (GCC -fanalyzer), ako aj na získanie informácií o varovaniach a chybách. Povolenie sa vykonáva pomocou voľby "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", kde voľby s "json" vedú k výstupu vo variante formátu JSON špecifickom pre GCC .
  • Implementované niektoré funkcie definované v štandarde C23 C, ako napríklad konštanta nullptr na definovanie nulových ukazovateľov, uľahčenie používania zoznamov s premenlivým počtom argumentov (variadic), rozšírenie možností enumov, atribút noreturn, umožňujúci používanie constexpr a auto pri definovaní objektov, typeof a typeof_unqual, nové kľúčové slová alignas, alignof, bool, false, static_assert, thread_local a true, čo umožňuje prázdne zátvorky pri inicializácii.
  • Implementované niektoré funkcie definované v štandarde C++23, ako napríklad možnosť umiestniť značky na koniec zložených výrazov, kompatibilita s typom char8_t, direktíva preprocesora #warning, oddelená (\u{}, \o{} , \x{}) a pomenované ('\N{LATINSKÉ VEĽKÉ PÍSMENO A}') escape sekvencie, statický operátor(), statický operátor[], operátor rovnosti vo výrazoch, s výnimkou niektorých obmedzení na použitie constexpr, podpora pre UTF-8 v zdrojových textoch.
  • libstdc++ má vylepšenú experimentálnu podporu pre štandardy C++20 a C++23, ako je pridanie podpory hlavičkových súborov a std::format, rozšírené možnosti súboru hlavičky , pridané ďalšie typy s pohyblivou rádovou čiarkou, implementované hlavičkové súbory A .
  • Do dokumentu boli pridané nové atribúty funkcií, ktorým sa deskriptor súboru odovzdáva v celočíselnej premennej: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" a "__attribute__((fd_arg_write(N)) ))“. Špecifikované atribúty možno použiť v statickom analyzátore (-fanalyzer) na zistenie nesprávnej práce s deskriptormi súborov.
  • Bol pridaný nový atribút "__attribute__((assume(EXPR)))", pomocou ktorého môžete kompilátoru povedať, že výraz je pravdivý a kompilátor môže túto skutočnosť použiť bez vyhodnocovania výrazu.
  • Pridaný príznak "-fstrict-flex-arrays=[level]" na výber správania pri spracovaní prvku flexibilného poľa v štruktúrach (členovia flexibilného poľa, pole neurčitej veľkosti na konci štruktúry, napríklad "int b[] ").
  • Pridaný príznak „-Wenum-int-mismatch“ na vydávanie upozornení, ak existuje nesúlad medzi vymenovaným typom a typom celého čísla.
  • Front-end Fortran má plnú podporu pre finalizáciu.
  • Do frontendu pre jazyk Go bola pridaná podpora generických funkcií a typov (generics) a bola zabezpečená kompatibilita s balíkmi pre jazyk Go 1.18.
  • Backend AArch64 podporuje CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) a Arm Neoverse V2 (neoverse -v2) . Do možnosti "-march=" bola pridaná podpora pre argumenty "armv9.1-a", "armv9.2-a" a "armv9.3-a". Pridaná podpora pre rozšírenia procesorov FEAT_LRCPC, FEAT_CSSC a FEAT_LSE2.
  • Do backendu architektúry ARM bola pridaná podpora pre CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) a Arm Cortex-M85 (cortex-m85).
  • Do x86 backendu bola pridaná podpora pre procesory Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids a AMD Zen 4 (znver4). Boli implementované rozšírenia architektúry inštrukčnej sady AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT a AMX-COMPLEX navrhnuté v procesoroch Intel. Pre C a C++ na systémoch s SSE2 je poskytnutý typ __bf16.
  • Backend generovania kódu pre grafické procesory AMD Radeon (GCN) implementuje možnosť používať akcelerátory AMD Instinct MI200 na zlepšenie výkonu OpenMP/OpenACC. Vylepšená vektorizácia pomocou inštrukcií SIMD.
  • Výrazne rozšírené možnosti backendu pre platformu LoongArch.
  • Pridaná podpora pre CPU T-Head XuanTie C906 (thead-c906) v backende RISC-V. Implementovaná podpora pre vektorové manipulátory definované v špecifikácii RISC-V Vector Extension Intrinsic 0.11. Pridaná podpora pre 30 rozšírení špecifikácie RISC-V.
  • Pri generovaní zdieľaných objektov s možnosťou „-shared“ sa po pridaní prostredia s pohyblivou rádovou čiarkou už nepridáva spúšťací kód, ak sú povolené optimalizácie „-Ofast“, „-ffast-math“ alebo „-funsafe-math-optimizations“. .
  • Podpora formátu ladenia DWARF je implementovaná takmer vo všetkých konfiguráciách.
  • Pridaná možnosť "-gz=zstd" na kompresiu informácií o ladení pomocou algoritmu Zstandard. Odstránená podpora pre zastaraný režim kompresie informácií o ladení "-gz=zlib-gnu".
  • Bola pridaná počiatočná podpora pre OpenMP 5.2 (Open Multi-Processing) a pokračovala implementácia štandardov OpenMP 5.0 a 5.1, pričom sa definovali API a metódy na aplikáciu metód paralelného programovania na viacjadrové a hybridné (CPU + GPU / DSP) systémy s jednotky zdieľanej pamäte a vektorizácie (SIMD).
  • Zastaraná podpora pre starý formát ukladania informácií o ladení STABS (povolený s voľbami -gstabs a -gxcoff), vytvorený v 1980. rokoch a používaný v ladiacom nástroji dbx.
  • Zastaraná podpora pre Solaris 11.3 (kód na podporu tejto platformy bude v budúcom vydaní odstránený).

Zdroj: opennet.ru

Pridať komentár