Utgivelse av GCC 13-kompilatorpakken

Etter et år med utvikling har den gratis kompilatorpakken GCC 13.1 blitt utgitt, den første betydelige utgivelsen i den nye GCC 13.x-grenen. I samsvar med det nye utgivelsesnummereringsskjemaet ble versjon 13.0 brukt i utviklingsprosessen, og kort tid før utgivelsen av GCC 13.1 hadde GCC 14.0-grenen allerede forgrenet seg, hvorfra den neste store utgivelsen, GCC 14.1, ville bli dannet.

Hovedendringer:

  • GCC inkluderer en frontend for å sette sammen programmer i programmeringsspråket Modula-2. Samlingen av kode som tilsvarer PIM2-, PIM3- og PIM4-dialektene, samt den aksepterte ISO-standarden for et gitt språk, støttes.
  • En grensesnitt med en implementering av Rust-språkkompilatoren utarbeidet av gccrs-prosjektet (GCC Rust) er lagt til GCC-kildetreet. I sin nåværende form er den fremre delen merket som eksperimentell og deaktivert som standard. Når frontend er klar (forventet i neste utgivelse), kan standard GCC-verktøyene brukes til å kompilere programmer på Rust-språket uten å måtte installere rustc-kompilatoren, bygget ved hjelp av LLVM-utviklinger.
  • Link Time Optimization (LTO)-motoren har lagt til støtte for jobbserveren som støttes av GNU make-prosjektet for å optimalisere utførelsen av parallelle bygg på tvers av flere tråder. I GCC brukes jobbserver for å parallellisere arbeid under LTO-optimalisering i sammenheng med hele programmet (WPA, Whole-program Analysis). For å samhandle med jobbserver, brukes navngitte rør som standard (-jobserver-style=fifo).
  • Den statiske analysatoren (-fanalyzer) tilbyr 20 nye diagnostiske kontroller, inkludert "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer-infinite -rekursjon" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-lekkasje".
  • Muligheten til å sende ut diagnostikk i SARIF-formatet, basert på JSON, er implementert. Det nye formatet kan brukes til å innhente statiske analyseresultater (GCC -fanalyzer), samt for å innhente advarsels- og feilinformasjon. Aktivering gjøres med alternativet "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", der alternativer med "json" resulterer i utdata i en GCC-spesifikk variant av JSON-formatet .
  • Implementerte noen funksjoner definert i C23 C-standarden, for eksempel nullptr-konstanten for å definere null-pekere, forenkle bruken av variadiske lister, utvide mulighetene for oppregninger, noreturn-attributtet, tillater bruk av constexpr og auto når du definerer objekter, typen og typeof_unqual, nye nøkkelord alignas, alignof, bool, false, static_assert, thread_local og true, slik at tomme parenteser kan spesifiseres under initialisering.
  • Implementerte noen funksjoner definert i C++23-standarden, for eksempel muligheten til å plassere merker på slutten av sammensatte uttrykk, kompatibilitet med char8_t-typen, #warning preprocessor-direktivet, avgrenset (\u{}, \o{}, \x{}) og navngitte ('\N{LATIN STORE BOKSTAV A}') escape-sekvenser, statisk operator(), statisk operator[], likhetsoperator inne i uttrykk, eliminering av noen restriksjoner på bruken av constexpr, støtte for UTF -8 i kildetekster.
  • libstdc++ har forbedret eksperimentell støtte for C++20- og C++23-standarder, for eksempel ved å legge til header-filstøtte og std::format, utvidede topptekstfiler , flere flyttallstyper lagt til, overskriftsfiler implementert Og .
  • Lagt til nye funksjonsattributter for å dokumentere at en filbeskrivelse sendes i en heltallsvariabel: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" og "__attribute__((fd_arg_write(N)) ) " De angitte attributtene kan brukes i en statisk analysator (-fanalyzer) for å oppdage feil drift av filbeskrivelser.
  • Lagt til et nytt attributt "__attribute__((assume(EXPR)))", som du kan fortelle kompilatoren med at uttrykket er sant og kompilatoren kan bruke dette faktum uten å evaluere uttrykket.
  • Lagt til "-fstrict-flex-arrays=[nivå]"-flagg for å velge atferd ved håndtering av fleksible array-elementer i strukturer (Flexible Array Members, en matrise av ubestemt størrelse på slutten av en struktur, for eksempel "int b[]" ).
  • Lagt til "-Wenum-int-mismatch"-flagg for å advare hvis det er et misforhold mellom en enum-type og en heltallstype.
  • Frontend for Fortran-språket støtter fullføring.
  • I frontend for Go-språket er det lagt til støtte for generiske funksjoner og typer (generiske), og kompatibilitet med pakker for Go-språket 1.18 er sikret.
  • Bakenden for AArch64-arkitekturen støtter CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) og Arm Neoverse V2 (neoverse) -v2). Lagt til støtte for "armv9.1-a", "armv9.2-a" og "armv9.3-a" argumenter til "-march=" alternativet. Lagt til støtte for FEAT_LRCPC, FEAT_CSSC og FEAT_LSE2 prosessorutvidelser.
  • Støtte for CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) og Arm Cortex-M85 (cortex-m85) er lagt til backend for ARM-arkitekturen.
  • Backend for x86-arkitektur legger til støtte for Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids-prosessorer, samt AMD Zen 4 (znver4)-prosessorer. Instruksjonssettets arkitekturutvidelser AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT og AMX-COMPLEX, foreslått i Intel-prosessorer, er implementert. For C- og C++-språk på SSE2-systemer leveres __bf16-typen.
  • Kodegenereringsbackend for AMD Radeon GPUer (GCN) inkluderer muligheten til å bruke AMD Instinct MI200-akseleratorer for å forbedre OpenMP/OpenACC-ytelsen. Forbedret vektorisering ved hjelp av SIMD-instruksjoner.
  • Backend-funksjonene for LoongArch-plattformen har blitt betydelig utvidet.
  • I backend for RISC-V-arkitekturen er støtte for T-Heads XuanTie C906 (thead-c906) CPU lagt til. Støtte for vektorprosessorer definert i RISC-V Vector Extension Intrinsic 0.11-spesifikasjonen er implementert. Lagt til støtte for 30 utvidelser til RISC-V-spesifikasjonen.
  • Generering av delte objekter med alternativet -shared stopper å legge til oppstartskode etter å ha lagt til et flyttallsmiljø hvis optimaliseringene -Ofast, -ffast-math eller -funsafe-math- er aktivert.
  • Støtte for DWARF-feilsøkingsformatet er implementert i nesten alle konfigurasjoner.
  • Lagt til alternativet "-gz=zstd" for å komprimere feilsøkingsinformasjon ved hjelp av Zstandard-algoritmen. Støtte for den eldre "-gz=zlib-gnu" feilsøkingskomprimeringsmodusen er avviklet.
  • Lagt til innledende støtte for OpenMP 5.2 (Open Multi-Processing) og fortsatt implementering av OpenMP 5.0 og 5.1 standardene, som definerer APIer og metoder for å bruke parallelle programmeringsmetoder på multi-core og hybrid (CPU+GPU/DSP) systemer med delt minne og vektoriseringsenheter (SIMD).
  • Støtte for det eldre lagringsformatet for feilsøkingsinformasjon «STABS» (aktivert med alternativene -gstabs og -gxcoff), opprettet på 1980-tallet og brukt i dbx-feilsøkingsprogrammet, har blitt avviklet.
  • Støtte for Solaris 11.3 er avviklet (koden for å støtte denne plattformen vil bli fjernet i en fremtidig utgivelse).

Kilde: opennet.ru

Legg til en kommentar