Dopo un anno di intenso sviluppo, è stata annunciata l'uscita della nuova versione di «GCC 15.1», che si posiziona come la prima versione stabile all'interno del nuovo ramo 15.x di questa popolare suite di compilatori open source.
Questa versione non solo lancia ufficialmente la nuova serie GCC 15, ma segna anche l'inizio dei preparativi per lo sviluppo di GCC 16, poiché il ramo 16.0 è stato biforcato in parallelo e getterà le basi per la prossima versione principale, GCC 16.1.
GCC 15.1 Nuove funzionalità principali
Una delle modifiche più notevoli in questa nuova versione è che GCC 15.1 adotta lo standard C23 come predefinito per la compilazione del codice C, utilizzando l'opzione -std=gnu23. Questo aggiornamento sostituisce lo standard precedente utilizzato di default, C17 (-std=gnu17), e introduce una serie di nuove funzionalità del nuovo standard. Tra questi c'è il costante nullptr, il tipo _BitInt(n) e le parole chiave bool, true e false, che potrebbe causare conflitti con gli identificatori esistenti nel codice legacy.
Un'altra nuova funzionalità che GCC 15.1 incorpora è la Direttiva #embed per incorporare dati binari, e attributi quali non sequenziale e riproducibile, che forniscono un maggiore controllo sull'ordine di esecuzione e sulla determinazione di risultati coerenti. Inoltre, sono stati implementati elementi del futuro standard C2Y, come le variabili dichiarate all'interno delle condizioni if, gli intervalli di valori nelle istruzioni case, i suffissi immaginari i e j e il supporto per gli operatori ++ e — applicati ai numeri complessi.
Miglioramenti in C++ e nel futuro C++26
Nel caso del linguaggio C++, la nuova versione di GCC 15.1 implementa funzionalità che sono in discussione per lo standard C++26, man mano che vengono introdotte nuove funzionalità , come l'operatore "friend", l'uso di constexpr con varianti del nuovo operatore e miglioramenti nella sintassi per collegamenti strutturati e attributi, come musttail per la ricorsione di coda garantita.
È stato ampliato anche il supporto C++23 con nuove regole per l'utilizzo dell'esportazione, miglioramenti nella gestione degli oggetti temporanei e un'implementazione sperimentale dei moduli std e std.compat in libstdc++. Inoltre, la sicurezza è rafforzata per l'inizializzazione dell'unione e la compilazione del codice è migliorata grazie a un sistema di hashing dei template più efficiente.
Nuovi avvisi e miglioramenti nell'analisi statica
Il sistema L'analisi statica ha ricevuto una riprogettazione visiva che evidenzia i problemi attraverso i simboli, Suggerimenti per la migrazione a C23 e una nuova libreria libgdiagnostics che consente il riutilizzo della logica diagnostica in altri progetti. È stato introdotto anche il supporto per la generazione di report in formato SARIF, facilitando l'integrazione con moderni strumenti di analisi del codice.
A Gli avvisi esistenti vengono aggiunti a quelli nuovi, COME -Wanalyzer-comportamento-indefinito-ptrdiff per rilevare sottrazioni tra puntatori non correlati, –Spazi finali e spazi iniziali per indicare spazi vuoti non necessari e –Guardia-testata per rilevare errori nelle protezioni di inclusione dell'intestazione.
Ottimizzazioni e supporto
Tra le ottimizzazioni degne di nota, È inclusa una modalità di compilazione incrementale per LTO (Link-Time Optimization), progettato per velocizzare le ricompilazioni quando le modifiche sono minime. Anche la vettorizzazione del ciclo è migliorata, anche nei casi in cui la dimensione degli array non è nota al momento della compilazione, e aumenta la velocità di compilazione di file molto grandi.
Per quanto riguarda il supporto, sono state aggiunte estensioni ARMv64 ad AArch8, supporto per nuove CPU come Apple M3, Cortex-X925 e NVIDIA Grace, ed estende la piattaforma MinGW. La generazione di codice per le GPU AMD Radeon è rafforzata con Supporto sperimentale per le nuove serie GFX9, GFX10.3 e GFX11. Per l'architettura x86, è abilitato il supporto per AVX10.2 e le nuove istruzioni AMX, mentre il supporto per Xeon Phi Knights è stato interrotto.
Inoltre, GCC 15.1 introduce un compilatore per COBOL (gcobol), con supporto per le architetture x86-64 e AArch64 e un'implementazione aggiornata del linguaggio D (versione 2.111.0). È stato aggiunto il supporto per gli interi senza segno in Fortran ed è stata avanzata l'adozione di OpenMP dalla versione 5.0 alla 6.0, compresi miglioramenti dell'interoperabilità e un utilizzo unificato della memoria sulle GPU.