GCC 15.1 gjør spranget til C23 og legger til forbedringer, optimaliseringer og mer i C++.

gcc

Etter et år med intens utvikling, Utgivelsen av den nye versjonen av «GCC 15.1» ble annonsert, som er posisjonert som den første stabile versjonen i den nye 15.x-grenen av denne populære kompilatorpakken med åpen kildekode.

Denne utgivelsen lanserer ikke bare offisielt den nye GCC 15-serien, men markerer også starten på forberedelsene til GCC 16-utviklingen, ettersom 16.0-grenen har blitt forgreget parallelt og vil legge grunnlaget for den neste store utgivelsen, GCC 16.1.

GCC 15.1 Viktigste nye funksjoner

En av de mest bemerkelsesverdige endringene i denne nye versjonen er at GCC 15.1 tar i bruk C23-standarden som standard for kompilering av C-kode, ved å bruke alternativet -std=gnu23. Denne oppdateringen erstatter den tidligere standarden som ble brukt som standard, C17 (-std=gnu17), og introduserer en rekke nye funksjoner i den nye standarden. Blant dem er konstanten nullptr, typen _BitInt(n) og nøkkelordene bool, true og false, noe som kan forårsake konflikter med eksisterende identifikatorer i eldre kode.

En annen ny funksjon som GCC 15.1 har innlemmet er #embed-direktiv for å legge inn binære data, og attributter som usekvensert og reproduserbar, som gir større kontroll over utførelsesrekkefølgen og bestemmelsen av konsistente resultater. I tillegg er elementer fra den fremtidige C2Y-standarden implementert, som variabler deklarert innenfor if-betingelser, verdiområder i case-setninger, imaginære suffikser i og j, og støtte for operatorene ++ og — brukt på komplekse tall.

Forbedringer i C++ og fremtidens C++26

Når det gjelder C++-språket, den nye versjonen av GCC 15.1 implementerer funksjoner som diskuteres for C++26-standarden, ettersom nye funksjoner introduseres, som for eksempel "friend"-operatoren, bruk av constexpr med varianter av den nye operatoren, og forbedringer i syntaksen for strukturerte lenker og attributter som musttail for garantert hale-rekursjon.

Støtte for C++23 er også utvidet med nye regler for bruk av eksport, forbedringer i håndtering av midlertidige objekter og en eksperimentell implementering av modulene std og std.compat i libstdc++. I tillegg styrkes sikkerheten for unionsinitialisering og kodekompilering forbedres takket være et mer effektivt mal-hashingsystem.

Nye advarsler og forbedringer i statisk analyse

Systemet Statisk analyse fikk en visuell redesign som fremhever problemer gjennom symboler, Tips for migrering til C23 og et nytt libgdiagnostics-bibliotek som tillater gjenbruk av diagnostisk logikk i andre prosjekter. Støtte for å generere rapporter i SARIF-format introduseres også, noe som forenkler integrering med moderne kodeanalyseverktøy.

Eksisterende advarsler legges til nye, som -Wanalyzer-udefinert-atferd-ptrdiff å oppdage subtraksjoner mellom urelaterte pekere, –W etterfølgende mellomrom og -W innledende mellomrom for å indikere unødvendig mellomrom, og –Wheader-guard for å oppdage feil i beskyttelse mot inkludering av headere.

Optimaliseringer og støtte

Blant de bemerkelsesverdige optimaliseringene, En inkrementell kompileringsmodus for LTO er inkludert (Link-Time Optimization), designet for å øke hastigheten på rekompileringer når endringene er minimale. Også løkkevektorisering er forbedret, selv i tilfeller der størrelsen på arrayene ikke er kjent ved kompileringstid, og øker hastigheten på å kompilere veldig store filer.

På støttesiden er ARMv64-utvidelser lagt til AArch8, støtte for nye CPU-er som Apple M3, Cortex-X925 og NVIDIA Grace, og utvider MinGW-plattformen. Kodegenerering for AMD Radeon GPU-er er styrket med Eksperimentell støtte for nye GFX9-, GFX10.3- og GFX11-serier. For x86-arkitekturen er støtte for AVX10.2 og nye AMX-instruksjoner aktivert, og støtte for Xeon Phi Knights er avviklet.

Videre GCC 15.1 introduserer en kompilator for COBOL (gcobol), med støtte for x86-64- og AArch64-arkitekturer, og en oppdatert implementering av D-språket (versjon 2.111.0). Støtte for usignerte heltall i Fortran er lagt til, og adopsjonen av OpenMP 5.0 til 6.0 er avansert, inkludert forbedringer av interoperabilitet og enhetlig minnebruk på GPU-er.