Release av GCC 13-kompilatorsviten

Efter ett års utveckling har lanseringen av den kostnadsfria kompilatorsviten GCC 13.1 släppts, den första betydande utgåvan i den nya GCC 13.x-grenen. Under det nya versionsnumreringsschemat användes version 13.0 under utvecklingen, och strax före lanseringen av GCC 13.1 var GCC 14.0-grenen redan splittrad, från vilken nästa betydande version av GCC 14.1 kommer att bildas.

Huvudändringar:

  • GCC antog en frontend för att bygga program i programmeringsspråket Modula-2. Den stöder byggkod som överensstämmer med dialekterna PIM2, PIM3 och PIM4, samt den accepterade ISO-standarden för det språket.
  • En frontend med implementeringen av Rust-språkkompilatorn som utarbetats av gccrs-projektet (GCC Rust) har lagts till i GCC-källträdet. I den aktuella vyn är forntenden markerad som experimentell och inaktiverad som standard. När gränssnittet är klart (förväntas i nästa utgåva), kan standardverktyget GCC användas för att kompilera Rust-program utan att behöva installera rustc-kompilatorn byggd med LLVM-utvecklingar.
  • Link-in-Step Optimization (LTO) lägger till stöd för en jobbserver (jobserver) som underhålls av GNU make-projektet för att optimera parallellbyggd exekvering över flera trådar. I GCC används jobbservern för att parallellisera arbete under LTO-optimering i sammanhanget för hela programmet (WPA, Whole-program Analysis). Namngivna pipes (--jobserver-style=fifo) används som standard för att kommunicera med jobbservern.
  • Den statiska analysatorn (-fanalyzer) erbjuder 20 nya diagnostiska kontroller, inklusive "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinite -rekursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Möjligheten att mata ut diagnostik i SARIF-format baserat på JSON har implementerats. Det nya formatet kan användas för att få statiska analysresultat (GCC -fanalyzer), samt för att få information om varningar och fel. Aktivering görs med alternativet "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", där alternativ med "json" resulterar i utdata i en GCC-specifik variant av JSON-formatet .
  • Implementerat några funktioner som definieras i C23 C-standarden, såsom nullptr-konstanten för att definiera nollpekare, vilket gör det lättare att använda listor med ett variabelt antal argument (variadisk), utökade möjligheter för enums, noreturn-attributet, vilket möjliggör användning av constexpr och auto när man definierar objekt, typen av och typeof_unqual, nya nyckelord alignas, alignof, bool, false, static_assert, thread_local och true, vilket tillåter tomma parenteser vid initiering.
  • Implementerade några funktioner definierade i C++23-standarden, såsom möjligheten att placera märken i slutet av sammansatta uttryck, kompatibilitet med char8_t-typen, #warning-förprocessordirektivet, avgränsat av (\u{}, \o{} , \x{}), och namngivna ('\N{LATINSKA STORA BOKSTAV A}') escape-sekvenser, statisk operator(), statisk operator[], likhetsoperator inom uttryck, undantag för vissa restriktioner för användningen av constexpr, support för UTF-8 i källtexter.
  • libstdc++ har förbättrat experimentellt stöd för C++20- och C++23-standarder, som att lägga till header-filstöd och std::format, utökade header-filfunktioner , ytterligare flyttalstyper lagts till, rubrikfiler implementerade Och .
  • Lade till nya funktionsattribut för att dokumentera att en filbeskrivning skickas i en heltalsvariabel: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))", och "__attribute__((fd_arg_write(N) )) ". De angivna attributen kan användas i en statisk analysator (-fanalyzer) för att upptäcka felaktigt arbete med fildeskriptorer.
  • Ett nytt attribut "__attribute__((assume(EXPR)))" har lagts till, med vilket du kan tala om för kompilatorn att uttrycket är sant och kompilatorn kan använda detta faktum utan att utvärdera uttrycket.
  • Lade till flaggan "-fstrict-flex-arrays=[level]" för att välja beteende vid bearbetning av ett flexibelt arrayelement i strukturer (Flexible Array Members, en array av obestämd storlek i slutet av strukturen, till exempel "int b[] ").
  • Lade till flaggan "-Wenum-int-mismatch" för att utfärda varningar om det finns en oöverensstämmelse mellan en uppräknad typ och en heltalstyp.
  • Fortran front-end har fullt stöd för slutförande.
  • Stöd för generiska funktioner och typer (generics) har lagts till i gränssnittet för Go-språket, och kompatibilitet med paket för Go 1.18-språket har säkerställts.
  • AArch64 backend stöder CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) och Arm Neoverse V2 (neoverse -v2) . Stöd för argumenten "armv9.1-a", "armv9.2-a" och "armv9.3-a" har lagts till i alternativet "-march=". Tillagt stöd för FEAT_LRCPC, FEAT_CSSC och FEAT_LSE2 processortillägg.
  • Stöd för STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) och Arm Cortex-M85 (cortex-m85) processorer har lagts till i ARM-arkitekturens backend.
  • Stöd för Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids och AMD Zen 86 (znver4)-processorer har lagts till x4-backend. Arkitekturtilläggen för AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT och AMX-COMPLEX som föreslagits i Intel-processorer har implementerats. För C och C++ på system med SSE2 tillhandahålls typen __bf16.
  • Kodgenereringsbackend för AMD Radeon GPU:er (GCN) implementerar möjligheten att använda AMD Instinct MI200-acceleratorer för att förbättra OpenMP/OpenACC-prestanda. Förbättrad vektorisering med SIMD-instruktioner.
  • Betydligt utökade backend-funktioner för LoongArch-plattformen.
  • Lade till stöd för CPU T-Heads XuanTie C906 (thead-c906) i RISC-V-backend. Implementerat stöd för vektorhanterare definierade i RISC-V Vector Extension Intrinsic 0.11-specifikationen. Tillagt stöd för 30 RISC-V-specifikationstillägg.
  • När delade objekt genereras med alternativet "-shared", läggs inte längre startkod till efter att en flyttalsmiljö har lagts till om optimeringarna "-Ofast", "-ffast-math" eller "-funsafe-math-optimizations" är aktiverade .
  • Stöd för DWARF-felsökningsformatet är implementerat i nästan alla konfigurationer.
  • Lade till alternativet "-gz=zstd" för att komprimera felsökningsinformation med Zstandard-algoritmen. Tog bort stöd för det föråldrade komprimeringsläget för felsökningsinformation "-gz=zlib-gnu".
  • Initialt stöd för OpenMP 5.2 (Open Multi-Processing) har lagts till och implementeringen av OpenMP 5.0 och 5.1 standarderna har fortsatt, vilket definierar API:er och metoder för att tillämpa parallella programmeringsmetoder på multi-core och hybrid (CPU + GPU / DSP) system med delat minne och vektoriseringsenheter (SIMD).
  • Utfasat stöd för det äldre STABS-felsökningsinformationslagringsformatet (aktiverat med alternativen -gstabs och -gxcoff), skapades på 1980-talet och användes i dbx-debuggern.
  • Utfasat stöd för Solaris 11.3 (koden för att stödja den här plattformen kommer att tas bort i en framtida version).

Källa: opennet.ru

Lägg en kommentar