GCC 15.1 tager springet til C23 og tilføjer C++-forbedringer, optimeringer og mere.

gcc

Efter et år med intens udvikling, udgivelsen af ​​den nye version af «GCC 15.1» blev annonceret, som er positioneret som den første stabile version inden for den nye 15.x-gren af ​​denne populære open source-compilersuite.

Denne udgivelse lancerer ikke blot officielt den nye GCC 15-serie, men markerer også begyndelsen på forberedelserne til GCC 16-udviklingen, da 16.0-grenen er blevet forgredet parallelt og vil lægge grunden til den næste store udgivelse, GCC 16.1.

GCC 15.1 Vigtigste nye funktioner

En af de mest bemærkelsesværdige ændringer i denne nye version er, at GCC 15.1 anvender C23-standarden som standard for kompilering af C-kode, ved at bruge -std=gnu23-indstillingen. Denne opdatering erstatter den tidligere standard, C17 (-std=gnu17), og introducerer en række nye funktioner i den nye standard. Blandt dem er konstanten nullptr, typen _BitInt(n) og nøgleordene bool, true og false, hvilket kan forårsage konflikter med eksisterende identifikatorer i ældre kode.

En anden ny funktion, som GCC 15.1 inkorporerer, er #embed-direktiv til at integrere binære data, og attributter som usekventeret og reproducerbar, som giver større kontrol over udførelsesrækkefølgen og bestemmelsen af ​​ensartede resultater. Derudover er elementer fra den fremtidige C2Y-standard blevet implementeret, såsom variabler deklareret inden for if-betingelser, værdiintervaller i case-udsagn, imaginære suffikser i og j, og understøttelse af operatorerne ++ og — anvendt på komplekse tal.

Forbedringer i C++ og fremtidens C++26

I tilfælde af C++-sproget, den nye version af GCC 15.1 implementerer funktioner, der diskuteres for C++26-standarden, i takt med at nye funktioner introduceres, såsom "friend"-operatoren, brugen af ​​constexpr med varianter af den nye operator og forbedringer i syntaksen for strukturerede links og attributter, såsom musttail for garanteret hale-rekursion.

C++23-understøttelse er også udvidet med nye regler for brug af eksport, forbedringer af håndtering af midlertidige objekter og en eksperimentel implementering af modulerne std og std.compat i libstdc++. Derudover styrkes sikkerheden for unionsinitialisering, og kodekompilering forbedres takket være et mere effektivt skabelonhashingsystem.

Nye advarsler og forbedringer i statisk analyse

Systemet Statisk analyse har fået et visuelt redesign som fremhæver problemer gennem symboler, Tips til migrering til C23 og et nyt libgdiagnostics-bibliotek hvilket tillader genbrug af diagnostisk logik i andre projekter. Understøttelse af generering af rapporter i SARIF-format introduceres også, hvilket letter integrationen med moderne kodeanalyseværktøjer.

ved Eksisterende advarsler tilføjes til nye, som -Wanalyzer-undefined-behavior-ptrdiff at detektere subtraktioner mellem uafhængige pointere, –Wtrailing-whitespace og -Wleading-whitespace for at angive unødvendigt mellemrum, og –Hvedevagt for at opdage fejl i beskyttelse mod inkludering af headere.

Optimeringer og support

Blandt de bemærkelsesværdige optimeringer, En trinvis kompileringstilstand til LTO er inkluderet (Link-Time Optimization), designet til at fremskynde rekompileringer, når ændringerne er minimale. Også loopvektorisering er forbedret, selv i tilfælde hvor størrelsen af ​​arrays ikke er kendt på kompileringstidspunktet, og øger hastigheden af ​​kompilering af meget store filer.

På supportsiden er der tilføjet ARMv64-udvidelser til AArch8, understøttelse af nye CPU'er som Apple M3, Cortex-X925 og NVIDIA Grace, og udvider MinGW-platformen. Kodegenerering til AMD Radeon GPU'er er styrket med Eksperimentel understøttelse af den nye GFX9-, GFX10.3- og GFX11-serie. For x86-arkitekturen er understøttelse af AVX10.2 og nye AMX-instruktioner aktiveret, og understøttelse af Xeon Phi Knights er ophørt.

Derudover GCC 15.1 introducerer en compiler til COBOL (gcobol), med understøttelse af x86-64 og AArch64 arkitekturer, og en opdateret implementering af D-sproget (version 2.111.0). Understøttelse af usignerede heltal i Fortran er blevet tilføjet, og implementeringen af ​​OpenMP 5.0 til 6.0 er blevet forbedret, herunder forbedringer af interoperabilitet og samlet hukommelsesbrug på GPU'er.