Després d'un any de desenvolupament intens, es va donar a conèixer el llançament de la nova versió de GCC 15.1, la qual es posiciona com la primera versió estable dins de la nova branca 15.x d'aquesta popular suite de compiladors de codi obert.
Aquest llançament no només inaugura oficialment la nova sèrie de GCC 15, sinó que també marca el començament de la preparació per al desenvolupament de GCC 16, ja que la branca 16.0 ha estat bifurcada en paral·lel i posarà les bases de la propera versió major, GCC 16.1.
Principals novetats de GCC 15.1
Un dels canvis més destacats de la nova versió és que GCC 15.1 adopta l'estàndard C23 com a predeterminat per a la compilació de codi en C, utilitzant l'opció -std=gnu23. Aquesta actualització reemplaça l'anterior estàndard utilitzat per defecte, C17 (-std=gnu17), i introdueix una sèrie de novetats del nou estàndard. Entre elles, hi ha la constant nullptr, el tipus _BitInt(n), i les paraules clau bool, true i false, que podrien generar conflictes amb identificadors existents en codi llegat.
Una altra de les novetats que incorpora GCC 15.1, és la directiva #embed per incrustar dades binàries, i atributs com un sequenced i reproduïble, que aporten més control sobre l'ordre d'execució i la determinació de resultats constants. A més, s'han implementat elements del futur estàndard C2Y, com ara variables declarades dins de condicions if, rangs de valors en instruccions case, sufixos imaginaris iij, i suport per a operadors ++ i aplicats a nombres complexos.
Millores en C++ i el futur C++26
En el cas del llenguatge C++, la nova versió de GCC 15.1 implementa característiques que s'estan debatent per a l'estàndard C++26, ja que s'introdueixen novetats com l'operador «friend», l'ús de constexpr amb variants de l'operador new, i millores a la sintaxi per a enllaços estructurats i atributs com a musttail per a recursió en cua garantida.
La compatibilitat amb C++23 també s'amplia amb noves regles per a l'ús d'export, millores en el maneig d'objectes temporals i una implementació experimental dels mòduls std i std.compat a libstdc++. Així mateix, es reforça la seguretat en la inicialització d'unions i es millora la compilació de codi gràcies a un sistema més eficient de hash per a plantilles.
Noves advertències i millores en l'anàlisi estàtica
El sistema de anàlisi estàtica va rebre un redisseny visual que destaca problemes mitjançant símbols, consells per migrar a C23, i una nova biblioteca libgdiagnostics que permet reutilitzar la lògica de diagnòstic en altres projectes. També s'introdueix suport per generar informes en format SARIF, facilitant-ne la integració amb eines modernes d'anàlisi de codi.
A les advertiments existents se sumen nous, com –Wanalyzer-undefined-behavior-ptrdiff per detectar restes entre punters no relacionats, –Wtrailing-whitespace i -Wleading-whitespace per assenyalar espais en blanc innecessaris, i –Wheader-guard per detectar errors a les proteccions d'inclusió de capçaleres.
Optimitzacions i suport
Entre les optimitzacions destacades, s'inclou un mode de compilació incremental per a LTO (Link-Time Optimization), pensat per accelerar recompilacions quan els canvis són mínims. També es millora la vectorització de bucles, fins i tot en casos on la mida de les matrius no es coneix en temps de compilació, i sincrementa la velocitat en la compilació darxius molt grans.
Per la part del suport, s'han afegit a AArch64 les extensions ARMv8, compatibilitat amb noves CPUs com Apple M3, Cortex-X925 i NVIDIA Grace, i s'estén la plataforma MinGW. La generació de codi per a GPUs AMD Radeon es reforça amb compatibilitat experimental per a noves sèries gfx9, gfx10.3 i gfx11. Per a l'arquitectura x86, s'habilita suport per a AVX10.2 i noves instruccions AMX, i es dóna de baixa el suport per als Xeon Phi Knights.
A més, GCC 15.1 introdueix un compilador per a COBOL (gcobol), amb suport per a les arquitectures x86-64 i AArch64, i una implementació actualitzada del llenguatge D (versió 2.111.0).