Vydání sady kompilátorů GCC 13

Po roce vývoje byla vydána bezplatná sada kompilátorů GCC 13.1, první významné vydání v nové větvi GCC 13.x. V souladu s novým schématem číslování verzí byla ve vývojovém procesu použita verze 13.0 a krátce před vydáním GCC 13.1 se již rozvětvila větev GCC 14.0, ze které se vytvoří další hlavní vydání, GCC 14.1.

Hlavní změny:

  • GCC obsahuje frontend pro sestavování programů v programovacím jazyce Modula-2. Je podporováno sestavení kódu odpovídající dialektům PIM2, PIM3 a PIM4 a také akceptovanému standardu ISO pro daný jazyk.
  • Do zdrojového stromu GCC byl přidán frontend s implementací překladače jazyka Rust připraveného projektem gccrs (GCC Rust). Ve své aktuální podobě je dopředný konec označen jako experimentální a ve výchozím nastavení je zakázán. Jakmile je frontend připraven (očekává se v příštím vydání), lze standardní nástroje GCC použít ke kompilaci programů v jazyce Rust bez nutnosti instalace kompilátoru rustc, vytvořeného pomocí vývoje LLVM.
  • Engine Link Time Optimization (LTO) přidal podporu pro jobserver podporovaný projektem GNU make pro optimalizaci provádění paralelních sestavení napříč více vlákny. V GCC se jobserver používá k paralelizaci práce při optimalizaci LTO v kontextu celého programu (WPA, Whole-program Analysis). Pro interakci s jobserverem se standardně používají pojmenované kanály (-jobserver-style=fifo).
  • Statický analyzátor (-fanalyzer) nabízí 20 nových diagnostických kontrol, včetně „-Wanalyzer-out-of-bounds“, „-Wanalyzer-allocation-size“, „-Wanalyzer-deref-before-check“, „-Wanalyzer-infinite“ -recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Byla implementována možnost výstupu diagnostiky ve formátu SARIF na základě JSON. Nový formát lze použít k získání výsledků statické analýzy (GCC -fanalyzer) a také k získání informací o varováních a chybách. Povolení se provádí pomocí volby "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", kde volby s "json" vedou k výstupu ve variantě formátu JSON specifické pro GCC .
  • Implementovány některé funkce definované ve standardu C23 C, jako je konstanta nullptr pro definování nulových ukazatelů, zjednodušení použití variadických seznamů, rozšíření možností výčtů, atribut noreturn, umožňující použití constexpr a auto při definování objektů, typeof a typeof_unqual, nová klíčová slova alignas, alignof, bool, false, static_assert, thread_local a true, což umožňuje zadat prázdné závorky během inicializace.
  • Implementovány některé funkce definované ve standardu C++23, jako je možnost umístit značky na konec složených výrazů, kompatibilita s typem char8_t, direktiva #warning preprocesoru, oddělovač (\u{}, \o{}, \x{}) a pojmenované ('\N{LATINSKÉ VELKÉ PÍSMENO A}') escape sekvence, statický operátor(), statický operátor[], operátor rovnosti uvnitř výrazů, odstranění některých omezení použití constexpr, podpora UTF -8 ve zdrojových textech.
  • libstdc++ zlepšila experimentální podporu pro standardy C++20 a C++23, například přidala podporu záhlaví souborů a std::format, rozšířené možnosti souboru záhlaví , přidány další typy s pohyblivou řádovou čárkou, implementovány hlavičkové soubory A .
  • Do dokumentu byly přidány nové atributy funkcí, kterým je deskriptor souboru předán v celočíselné proměnné: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" a "__attribute__((fd_arg_write(N))) )" Zadané atributy lze použít ve statickém analyzátoru (-fanalyzer) k detekci nesprávné operace s deskriptory souborů.
  • Přidán nový atribut „__attribute__((assume(EXPR)))“, pomocí kterého můžete kompilátoru říci, že výraz je pravdivý a kompilátor může tuto skutečnost použít, aniž by výraz vyhodnotil.
  • Přidán příznak "-fstrict-flex-arrays=[level]" pro výběr chování při manipulaci s prvky flexibilního pole ve strukturách (Flexible Array Members, pole neurčité velikosti na konci struktury, například "int b[]" ).
  • Přidán příznak „-Wenum-int-mismatch“, který varuje, pokud dojde k neshodě mezi typem výčtu a typem celého čísla.
  • Frontend pro jazyk Fortran plně podporuje finalizaci.
  • Do frontendu pro jazyk Go byla přidána podpora generických funkcí a typů (generics) a zajištěna kompatibilita s balíčky pro jazyk Go 1.18.
  • Backend pro architekturu 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). Přidána podpora pro argumenty "armv9.1-a", "armv9.2-a" a "armv9.3-a" do volby "-march=". Přidána podpora pro rozšíření procesorů FEAT_LRCPC, FEAT_CSSC a FEAT_LSE2.
  • Podpora pro CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) a Arm Cortex-M85 (cortex-m85) byla přidána do backendu pro architekturu ARM.
  • Backend pro architekturu x86 přidává podporu pro procesory Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids a také procesory AMD Zen 4 (znver4). Byla implementována rozšíření architektury instrukční sady AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT a AMX-COMPLEX, navržená v procesorech Intel. Pro jazyky C a C++ na systémech SSE2 je k dispozici typ __bf16.
  • Backend pro generování kódu pro GPU AMD Radeon (GCN) zahrnuje možnost používat akcelerátory AMD Instinct MI200 ke zlepšení výkonu OpenMP/OpenACC. Vylepšená vektorizace pomocí instrukcí SIMD.
  • Možnosti backendu platformy LoongArch byly výrazně rozšířeny.
  • V backendu pro architekturu RISC-V byla přidána podpora pro CPU XuanTie C906 (thead-c906) od T-Head. Byla implementována podpora pro vektorové procesory definované ve specifikaci RISC-V Vector Extension Intrinsic 0.11. Přidána podpora pro 30 rozšíření do specifikace RISC-V.
  • Generování sdílených objektů pomocí volby -shared zastaví přidávání spouštěcího kódu po přidání prostředí s plovoucí desetinnou čárkou, pokud jsou povoleny optimalizace -Ofast, -ffast-math nebo -funsafe-math-optimization.
  • Podpora formátu ladění DWARF je implementována téměř ve všech konfiguracích.
  • Přidána volba "-gz=zstd" pro komprimaci ladicích informací pomocí algoritmu Zstandard. Podpora pro starší režim komprese ladění "-gz=zlib-gnu" byla ukončena.
  • Přidána počáteční podpora pro OpenMP 5.2 (Open Multi-Processing) a pokračující implementace standardů OpenMP 5.0 a 5.1, které definují API a metody pro aplikaci metod paralelního programování na vícejádrových a hybridních (CPU+GPU/DSP) systémech se sdílenou pamětí a vektorizační jednotky (SIMD).
  • Podpora pro starší formát úložiště informací o ladění „STABS“ (povolený pomocí voleb -gstabs a -gxcoff), vytvořený v 1980. letech a používaný v ladicím programu dbx, byla ukončena.
  • Podpora pro Solaris 11.3 byla ukončena (kód pro podporu této platformy bude v budoucí verzi odstraněn).

Zdroj: opennet.ru

Přidat komentář