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:
- GCC bevat nu een frontend voor het bouwen van programma's in de programmeertaal Modula-2. Er wordt ondersteuning geboden voor bouwcode die voldoet aan de PIM2-, PIM3- en PIM4-dialecten en aan de geaccepteerde ISO-norm voor de taal.
- Een frontend met een implementatie van de Rust-taalcompiler, voorbereid door het gccrs (GCC Rust)-project, is toegevoegd aan de GCC-broncodeboom. In de huidige vorm is het forten gemarkeerd als experimenteel en standaard uitgeschakeld. Zodra de frontend klaar is (naar verwachting in de volgende release), kan de standaard GCC-toolchain worden gebruikt om Rust-programma's te compileren zonder dat de rustc-compiler hoeft te worden geïnstalleerd. Deze is gebouwd met behulp van LLVM-werk.
- 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 analyzer (-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 is geïmplementeerd om diagnostische gegevens uit te voeren in SARIF-formaat, op basis van JSON. Het nieuwe formaat kan worden gebruikt om statische analyseresultaten te verkrijgen (GCC -fanalyzer), maar ook om informatie te verkrijgen over waarschuwingen en fouten. Ingeschakeld door 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.
- Verschillende functies die in de C23 C-standaard zijn gedefinieerd, zijn geïmplementeerd, zoals de constante nullptr voor het definiëren van null-pointers, het vereenvoudigen van het gebruik van variadische lijsten, het uitbreiden van de mogelijkheden van opsommingen, het noreturn-attribuut, het toestaan van het gebruik van constexpr en auto bij het definiëren van objecten, de operatoren typeof en typeof_unqual, de nieuwe trefwoorden alignas, alignof, bool, false, static_assert, thread_local en true en het toestaan dat lege haakjes worden opgegeven tijdens initialisatie.
- Sommige functies die in de C++23-standaard zijn gedefinieerd, zijn geïmplementeerd, zoals de mogelijkheid om labels aan het einde van samengestelde expressies te plaatsen, compatibiliteit met het char8_t-type, de preprocessorrichtlijn #warning, gescheiden (\u{}, \o{}, \x{}) en benoemde ('\N{LATIN CAPITAL LETTER A}') escape-reeksen, static operator(), static operator[], de gelijkheidsoperator binnen expressies, de eliminatie van enkele beperkingen op het gebruik van constexpr en ondersteuning voor UTF-8 in bronteksten.
- libstdc++ heeft de experimentele ondersteuning voor de C++20- en C++23-standaarden verbeterd, zoals het toevoegen van ondersteuning voor headerbestanden en std::format, de mogelijkheden van headerbestanden zijn uitgebreid , extra floating point-typen toegevoegd, headerbestanden geïmplementeerd En .
- Nieuwe functiekenmerken toegevoegd om te documenteren dat een bestandsdescriptor wordt doorgegeven in een gehele variabele: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" en "__attribute__((fd_arg_write(N)))". De opgegeven kenmerken kunnen in de statische analyse (-fanalyzer) worden gebruikt om onjuiste bewerkingen van bestandsdescriptoren te detecteren.
- Er is een nieuw kenmerk toegevoegd: "__attribute__((assume(EXPR)))" waarmee aan de compiler kan worden doorgegeven dat een expressie waar is. De compiler kan dit feit gebruiken zonder de expressie 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.
- De backend voor de AArch64-architectuur implementeert ondersteuning voor de Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) en Arm Neoverse V2 (neoverse-v2) CPU's. Ondersteuning toegevoegd voor de "-march=" argumenten "armv9.1-a", "armv9.2-a" en "armv9.3-a" aan de "-march=" optie. Ondersteuning toegevoegd voor FEAT_LRCPC, FEAT_CSSC en FEAT_LSE2 processoruitbreidingen.
- De ARM-architectuurbackend ondersteunt nu STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) en Arm Cortex-M85 (cortex-m85) CPU's.
- De x86-backend ondersteunt nu Intel Raptor Lake-, Meteor Lake-, Sierra Forest-, Grand Ridge-, Emerald Rapids-, Granite Rapids- en AMD Zen 4 (znver4)-processors. Implementeert de voorgestelde Intel processor-instructiesetarchitectuur-extensies AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT en AMX-COMPLEX. Voor C en C++ op systemen met SSE2 is het type __bf16 beschikbaar.
- De AMD Radeon GPU Code Generation (GCN) backend ondersteunt nu het gebruik van AMD Instinct MI200-versnellers om de OpenMP/OpenACC-prestaties te verbeteren. Verbeterde vectorisatie met behulp van SIMD-instructies.
- Aanzienlijk uitgebreide backend-mogelijkheden voor het LoongArch-platform.
- De RISC-V backend biedt nu ondersteuning voor de XuanTie C906 (thead-c906) CPU van T-Head. Ondersteuning voor vectorprocessors gedefinieerd in de RISC-V Vector Extension Intrinsic 0.11-specificatie is geïmplementeerd. 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 oude debug-informatieopslagformaat "STABS" (ingeschakeld met de opties -gstabs en -gxcoff), dat in de jaren 1980 werd ontwikkeld en werd gebruikt in de dbx-debugger, is stopgezet.
- Verouderde ondersteuning voor Solaris 11.3 (code ter ondersteuning van dit platform wordt in een toekomstige release verwijderd).
Bron: opennet.ru
