Udgivelse af GCC 13 compiler suite

Efter et års udvikling er udgivelsen af ​​den gratis GCC 13.1 compiler suite blevet frigivet, den første betydelige udgivelse i den nye GCC 13.x gren. Under det nye udgivelsesnummereringsskema blev version 13.0 brugt under udviklingen, og kort før udgivelsen af ​​GCC 13.1 var GCC 14.0-grenen allerede splittet, hvorfra den næste betydelige udgivelse af GCC 14.1 vil blive dannet.

Vigtigste ændringer:

  • GCC vedtog en frontend til at bygge programmer i Modula-2 programmeringssproget. Det understøtter byggekode, der er i overensstemmelse med PIM2-, PIM3- og PIM4-dialekterne samt den accepterede ISO-standard for det pågældende sprog.
  • En frontend med implementeringen af ​​Rust-sprogkompileren, der er udarbejdet af gccrs-projektet (GCC Rust), er blevet tilføjet til GCC-kildetræet. I den aktuelle visning er forntenden markeret som eksperimentel og deaktiveret som standard. Når frontenden er klar (forventes i næste udgivelse), kan standard GCC-værktøjssættet bruges til at kompilere Rust-programmer uden behov for at installere rustc-kompileren bygget ved hjælp af LLVM-udviklinger.
  • Link-in-Step Optimization (LTO) tilføjer understøttelse af en jobserver (jobserver), der vedligeholdes af GNU make-projektet for at optimere parallel byggeudførelse på tværs af flere tråde. I GCC bruges jobserveren til at parallelisere arbejde under LTO-optimering i sammenhæng med hele programmet (WPA, Whole-program Analysis). Navngivne rør (--jobserver-style=fifo) bruges som standard til at interagere med jobserveren.
  • Den statiske analysator (-fanalyzer) tilbyder 20 nye diagnostiske kontroller, inklusive "-Wanalyzer-out-of-bounds", "-Wanalyzer-allokeringsstørrelse", "-Wanalyzer-deref-before-check", "-Wanalyzer-uendelig -rekursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Muligheden for at udlæse diagnostik i SARIF-format baseret på JSON er blevet implementeret. Det nye format kan bruges til at få statiske analyseresultater (GCC -fanalyzer), samt til at få information om advarsler og fejl. Aktivering sker med muligheden "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", hvor muligheder med "json" resulterer i output i en GCC-specifik variant af JSON-formatet .
  • Implementeret nogle funktioner defineret i C23 C-standarden, såsom nullptr-konstanten til at definere null-pointere, hvilket gør det nemmere at bruge lister med et variabelt antal argumenter (variadisk), udvide mulighederne for enums, noreturn-attributten, hvilket tillader brugen af constexpr og auto ved definition af objekter, typeof og typeof_unqual, nye søgeord alignas, alignof, bool, false, static_assert, thread_local og true, hvilket tillader tomme parenteser ved initialisering.
  • Implementeret nogle funktioner defineret i C++23-standarden, såsom evnen til at placere mærker i slutningen af ​​sammensatte udtryk, kompatibilitet med char8_t-typen, #warning preprocessor-direktivet, afgrænset af (\u{}, \o{} , \x{}), og navngivne ('\N{LATINISK STORT BOGSTAV A}') escape-sekvenser, statisk operator(), statisk operator[], lighedsoperator i udtryk, undtagelse af nogle begrænsninger for brugen af ​​constexpr, support for UTF-8 i kildetekster.
  • libstdc++ har forbedret eksperimentel understøttelse af C++20 og C++23 standarder, såsom tilføjelse af header fil support og std::format, udvidede header-filfunktioner , yderligere flydende kommatyper tilføjet, header-filer implementeret Og .
  • Tilføjet nye funktionsattributter for at dokumentere, at en filbeskrivelse sendes i en heltalsvariabel: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))", og "__attribute__((fd_arg_write(N) )) ". De angivne attributter kan bruges i en statisk analysator (-fanalyzer) til at opdage forkert arbejde med filbeskrivelser.
  • En ny attribut "__attribute__((assume(EXPR)))" er blevet tilføjet, hvormed du kan fortælle compileren, at udtrykket er sandt, og compileren kan bruge dette faktum uden at evaluere udtrykket.
  • Tilføjet "-fstrict-flex-arrays=[niveau]"-flag for at vælge adfærd ved behandling af et fleksibelt array-element i strukturer (Flexible Array Members, et array af ubestemt størrelse i slutningen af ​​strukturen, f.eks. "int b[] ").
  • Tilføjet "-Wenum-int-mismatch" flag for at udstede advarsler, hvis der er et misforhold mellem en opregnet type og en heltalstype.
  • Fortran front-end har fuld understøttelse til færdiggørelse.
  • Understøttelse af generiske funktioner og typer (generiske) er blevet tilføjet til frontend for Go-sproget, og kompatibilitet med pakker til Go 1.18-sproget er sikret.
  • AArch64-backend understø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) . Understøttelse af "armv9.1-a", "armv9.2-a" og "armv9.3-a" argumenter er blevet tilføjet til "-march=" muligheden. Tilføjet understøttelse af FEAT_LRCPC, FEAT_CSSC og FEAT_LSE2 processorudvidelser.
  • Understøttelse af STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) og Arm Cortex-M85 (cortex-m85) CPU'er er blevet tilføjet til ARM-arkitekturens backend.
  • Understøttelse af Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids og AMD Zen 86 (znver4)-processorer er blevet tilføjet til x4-backend. AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT og AMX-COMPLEX instruktionssætarkitekturudvidelser foreslået i Intel-processorer er blevet implementeret. For C og C++ på systemer med SSE2 leveres typen __bf16.
  • Kodegenereringsbackend til AMD Radeon GPU'er (GCN) implementerer muligheden for at bruge AMD Instinct MI200-acceleratorer til at forbedre OpenMP/OpenACC-ydeevnen. Forbedret vektorisering ved hjælp af SIMD-instruktioner.
  • Væsentligt udvidede backend-funktioner til LoongArch-platformen.
  • Tilføjet understøttelse af CPU T-Heads XuanTie C906 (thead-c906) i RISC-V-backend. Implementeret understøttelse af vektorhandlere defineret i RISC-V Vector Extension Intrinsic 0.11-specifikationen. Tilføjet understøttelse af 30 RISC-V-specifikationsudvidelser.
  • Når der genereres delte objekter med "-shared"-indstillingen, tilføjes startkode ikke længere efter tilføjelse af et floating-point-miljø, hvis "-Ofast", "-ffast-math" eller "-funsafe-math-optimizations"-optimeringer er aktiveret .
  • Understøttelse af DWARF-debugging-formatet er implementeret i næsten alle konfigurationer.
  • Tilføjet "-gz=zstd" mulighed for at komprimere debug information ved hjælp af Zstandard algoritmen. Fjernet understøttelse af den forældede debug-informationskomprimeringstilstand "-gz=zlib-gnu".
  • Indledende understøttelse af OpenMP 5.2 (Open Multi-Processing) er blevet tilføjet, og implementeringen af ​​OpenMP 5.0 og 5.1 standarderne er fortsat, og definerer API'er og metoder til anvendelse af parallelle programmeringsmetoder på multi-core og hybrid (CPU + GPU / DSP) systemer med delt hukommelse og vektoriseringsenheder (SIMD).
  • Understøttelse af det ældre lagringsformat for debug information "STABS" (aktiveret af -gstabs og -gxcoff mulighederne), oprettet i 1980'erne og brugt i dbx debugger, er blevet afbrudt.
  • Forældet support til Solaris 11.3 (koden til at understøtte denne platform vil blive fjernet i en fremtidig udgivelse).

Kilde: opennet.ru

Tilføj en kommentar