Vrijgave van de GCC 13-compilersuite

Na een jaar van ontwikkeling is de release van de gratis GCC 13.1-compilersuite uitgebracht, de eerste belangrijke release in de nieuwe GCC 13.x-tak. Onder het nieuwe nummeringsschema voor releases werd versie 13.0 gebruikt tijdens de ontwikkeling, en kort voor de release van GCC 13.1 was de GCC 14.0-tak al gesplitst, waaruit de volgende belangrijke release van GCC 14.1 zal worden gevormd.

Grote veranderingen:

  • De GCC heeft een frontend aangenomen voor het bouwen van programma's in de programmeertaal Modula-2. Het ondersteunt het bouwen van code die voldoet aan de PIM2-, PIM3- en PIM4-dialecten, evenals de geaccepteerde ISO-standaard voor die taal.
  • Een frontend met de implementatie van de Rust-taalcompiler, voorbereid door het gccrs-project (GCC Rust), is toegevoegd aan de GCC-broncodeboom. In de huidige weergave is de fortend standaard gemarkeerd als experimenteel en uitgeschakeld. Zodra de frontend klaar is (verwacht in de volgende release), kan de standaard GCC-toolkit worden gebruikt om Rust-programma's te compileren zonder de noodzaak om de Rustc-compiler te installeren die is gebouwd met behulp van LLVM-ontwikkelingen.
  • Link-in-Step Optimization (LTO) voegt ondersteuning toe voor een jobserver (jobserver) die wordt onderhouden door het GNU make-project om de uitvoering van parallelle builds over meerdere threads te optimaliseren. In GCC wordt de jobserver gebruikt om werk te parallelliseren tijdens LTO-optimalisatie in de context van het volledige programma (WPA, Whole-program Analysis). Named pipes (--jobserver-style=fifo) worden standaard gebruikt voor interactie met de jobserver.
  • De statische analysator (-fanalyzer) biedt 20 nieuwe diagnostische controles, waaronder "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer-infinite -recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • De mogelijkheid om diagnostische gegevens uit te voeren in SARIF-indeling op basis van JSON is geïmplementeerd. Het nieuwe formaat kan worden gebruikt om statische analyseresultaten te krijgen (GCC -fanalyzer), maar ook om informatie over waarschuwingen en fouten te krijgen. Inschakelen gebeurt met de optie "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", waarbij opties met "json" resulteren in uitvoer in een GCC-specifieke variant van het JSON-formaat .
  • Enkele functies geïmplementeerd die zijn gedefinieerd in de C23 C-standaard, zoals de nullptr-constante voor het definiëren van null-pointers, waardoor het gemakkelijker wordt om lijsten te gebruiken met een variabel aantal argumenten (variadic), uitbreiding van de mogelijkheden van enums, het noreturn-attribuut, waardoor het gebruik van constexpr en auto bij het definiëren van objecten, het typeof en typeof_unqual, nieuwe trefwoorden alignas, alignof, bool, false, static_assert, thread_local en true, staan ​​lege haakjes toe bij initialisatie.
  • Enkele functies geïmplementeerd die zijn gedefinieerd in de C++23-standaard, zoals de mogelijkheid om markeringen aan het einde van samengestelde uitdrukkingen te plaatsen, compatibiliteit met het type char8_t, de #warning preprocessor-richtlijn, gescheiden door (\u{}, \o{} , \x{}), en benoemde ('\N{LATIJNS HOOFDLETTER A}') escapereeksen, statische operator(), statische operator[], gelijkheidsoperator binnen uitdrukkingen, uitzondering van enkele beperkingen op het gebruik van constexpr, ondersteuning voor UTF-8 in bronteksten.
  • Verbeterde experimentele ondersteuning voor C++20- en C++23-standaarden in libstdc++, zoals het toevoegen van ondersteuning voor headerbestanden en std::format, uitgebreide header-bestandsmogelijkheden , extra drijvende-kommatypen toegevoegd, header-bestanden geïmplementeerd En .
  • Nieuwe functiekenmerken toegevoegd om te documenteren dat een bestandsdescriptor wordt doorgegeven in een variabele met een geheel getal: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))", en "__attribute__((fd_arg_write(N) )) ". De opgegeven attributen kunnen worden gebruikt in een statische analyser (-fanalyzer) om onjuist werk met bestandsdescriptors te detecteren.
  • Er is een nieuw attribuut "__attribute__((assume(EXPR)))" toegevoegd, waarmee u de compiler kunt vertellen dat de uitdrukking waar is en de compiler dit feit kan gebruiken zonder de uitdrukking te evalueren.
  • Vlag "-fstrict-flex-arrays=[level]" toegevoegd om gedrag te selecteren bij het verwerken van een flexibel array-element in structuren (Flexible Array Members, een array van onbepaalde grootte aan het einde van de structuur, bijvoorbeeld "int b[] ").
  • Vlag "-Wenum-int-mismatch" toegevoegd om waarschuwingen te geven als er een mismatch is tussen een opgesomd type en een integer type.
  • De front-end van Fortran heeft volledige ondersteuning voor afronding.
  • Ondersteuning voor generieke functies en typen (generics) is toegevoegd aan de frontend voor de Go-taal en compatibiliteit met pakketten voor de Go 1.18-taal is verzekerd.
  • AArch64-backend ondersteunt CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) en Arm Neoverse V2 (neoverse -v2) . Ondersteuning voor "armv9.1-a", "armv9.2-a" en "armv9.3-a" argumenten is toegevoegd aan de "-march=" optie. Ondersteuning toegevoegd voor FEAT_LRCPC-, FEAT_CSSC- en FEAT_LSE2-processoruitbreidingen.
  • Ondersteuning voor STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) en Arm Cortex-M85 (cortex-m85) CPU's is toegevoegd aan de ARM-architectuurbackend.
  • Ondersteuning voor Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids en AMD Zen 86 (znver4) processors is toegevoegd aan de x4-backend. De AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT en AMX-COMPLEX instructiesetarchitectuuruitbreidingen voorgesteld in Intel-processors zijn geïmplementeerd. Voor C en C++ op systemen met SSE2 wordt het type __bf16 geleverd.
  • De backend voor het genereren van code voor AMD Radeon GPU's (GCN) implementeert de mogelijkheid om AMD Instinct MI200-versnellers te gebruiken om de prestaties van OpenMP/OpenACC te verbeteren. Verbeterde vectorisatie met behulp van SIMD-instructies.
  • Aanzienlijk uitgebreide backend-mogelijkheden voor het LoongArch-platform.
  • Ondersteuning toegevoegd voor CPU T-Head's XuanTie C906 (thead-c906) in de RISC-V-backend. Geïmplementeerde ondersteuning voor vectorhandlers gedefinieerd in de RISC-V Vector Extension Intrinsic 0.11-specificatie. Ondersteuning toegevoegd voor 30 RISC-V-specificatie-uitbreidingen.
  • Bij het genereren van gedeelde objecten met de optie "-shared", wordt er geen opstartcode meer toegevoegd na het toevoegen van een drijvende-kommaomgeving als de optimalisaties "-Ofast", "-ffast-math" of "-funsafe-math-optimizations" zijn ingeschakeld .
  • Ondersteuning voor het DWARF-foutopsporingsformaat is in bijna alle configuraties geïmplementeerd.
  • Optie "-gz=zstd" toegevoegd om foutopsporingsinformatie te comprimeren met behulp van het Zstandard-algoritme. Ondersteuning verwijderd voor de verouderde compressiemodus voor foutopsporingsinformatie "-gz=zlib-gnu".
  • Initiële ondersteuning voor OpenMP 5.2 (Open Multi-Processing) is toegevoegd en de implementatie van de OpenMP 5.0- en 5.1-standaarden is voortgezet, waarbij API's en methoden zijn gedefinieerd voor het toepassen van parallelle programmeermethoden op multi-core en hybride (CPU + GPU / DSP) systemen met gedeeld geheugen en vectorisatie-eenheden (SIMD).
  • Ondersteuning voor het verouderde opslagformaat voor foutopsporingsinformatie "STABS" (ingeschakeld door de opties -gstabs en -gxcoff), gemaakt in de jaren tachtig en gebruikt in de dbx-foutopsporing, is stopgezet.
  • Verouderde ondersteuning voor Solaris 11.3 (code ter ondersteuning van dit platform wordt in een toekomstige release verwijderd).

Bron: opennet.ru

Voeg een reactie