GCC 15.1 gör hoppet till C23 och lägger till förbättringar, optimeringar och mer i C++.

gcc

Efter ett år av intensiv utveckling, lanseringen av den nya versionen av «GCC 15.1» tillkännagavs, vilket är positionerat som den första stabila versionen inom den nya 15.x-grenen av denna populära kompilatorsvit med öppen källkod.

Denna utgåva lanserar inte bara officiellt den nya GCC 15-serien, utan markerar också början på förberedelserna för GCC 16-utvecklingen, då 16.0-grenen har förgrenats parallellt och kommer att lägga grunden för nästa större utgåva, GCC 16.1.

GCC 15.1 Huvudnyheter

En av de mest anmärkningsvärda förändringarna i den här nya versionen är att GCC 15.1 antar C23-standarden som standard för att kompilera C-kod, med hjälp av alternativet -std=gnu23. Den här uppdateringen ersätter den tidigare standarden som användes som standard, C17 (-std=gnu17), och introducerar ett antal nya funktioner i den nya standarden. Bland dem är konstanten nullptr, typen _BitInt(n) och nyckelorden bool, true och false, vilket kan orsaka konflikter med befintliga identifierare i äldre kod.

En annan ny funktion som GCC 15.1 har införlivat är #embed-direktiv för att bädda in binär data, och attribut som osekvenserad och reproducerbar, vilket ger större kontroll över exekveringsordningen och fastställandet av konsekventa resultat. Dessutom har delar av den framtida C2Y-standarden implementerats, såsom variabler deklarerade inom if-villkor, värdeintervall i case-satser, imaginära suffix i och j, och stöd för operatorerna ++ och — tillämpat på komplexa tal.

Förbättringar i C++ och framtidens C++26

När det gäller språket C++, den nya versionen av GCC 15.1 implementerar funktioner som diskuteras för C++26-standarden, i takt med att nya funktioner introduceras, såsom operatorn "friend", användningen av constexpr med varianter av den nya operatorn och förbättringar i syntaxen för strukturerade länkar och attribut, såsom musttail för garanterad tail-rekursion.

Stödet för C++23 har också utökats med nya regler för att använda export, förbättringar av hanteringen av temporära objekt och en experimentell implementering av modulerna std och std.compat i libstdc++. Dessutom stärks säkerheten för unionsinitiering och kodkompilering förbättras tack vare ett effektivare hash-system för mallar.

Nya varningar och förbättringar i statisk analys

Systemet Statisk analys fick en visuell omdesign som belyser problem genom symboler, Tips för migrering till C23 och ett nytt libgdiagnostics-bibliotek vilket möjliggör återanvändning av diagnostisk logik i andra projekt. Stöd för att generera rapporter i SARIF-format introduceras också, vilket underlättar integration med moderna verktyg för kodanalys.

Vid Befintliga varningar läggs till i nya, som -Wanalyzer-undefined-behavior-ptrdiff för att upptäcka subtraktioner mellan orelaterade pekare, –Wtrailing-whitespace och -Wleading-whitespace för att indikera onödigt mellanslag, och –Wheader-guard för att upptäcka fel i skydd mot inkludering av rubriker.

Optimeringar och support

Bland de anmärkningsvärda optimeringarna, Ett stegvis kompileringsläge för LTO ingår (Länktidsoptimering), utformad för att påskynda omkompileringar när ändringarna är minimala. Också loopvektorisering förbättras, även i fall där storleken på arrayerna inte är känd vid kompileringstillfället, och ökar hastigheten för att kompilera mycket stora filer.

På supportsidan har ARMv64-tillägg lagts till i AArch8, stöd för nya processorer som Apple M3, Cortex-X925 och NVIDIA Grace, och utökar MinGW-plattformen. Kodgenerering för AMD Radeon GPU:er förstärks med Experimentellt stöd för nya GFX9-, GFX10.3- och GFX11-serier. För x86-arkitekturen är stöd för AVX10.2 och nya AMX-instruktioner aktiverat, och stöd för Xeon Phi Knights har upphört.

Dessutom, GCC 15.1 introducerar en kompilator för COBOL (gcobol), med stöd för x86-64- och AArch64-arkitekturer, och en uppdaterad implementering av D-språket (version 2.111.0). Stöd för osignerade heltal i Fortran har lagts till, och implementeringen av OpenMP 5.0 till 6.0 har avancerat, inklusive förbättringar av interoperabilitet och enhetlig minnesanvändning på GPU:er.