I compilatori della serie GCC 10 arrivano con un aggiornamento importante

GCC (GNU Compiler Collection) 10.1, una versione principale della piattaforma, è stata pubblicata il 7 maggio 2020, con caratteristiche salienti tra cui funzionalità C ++ 20 e supporto del linguaggio C2X. C2X è la prossima importante revisione del linguaggio C, prevista per il 2022. 

Le note di rilascio per GCC 10 mostrano che sono state implementate una moltitudine di funzionalità di C ++ 20, incluso il permesso dell'assemblaggio inline nelle funzioni constexpr e l'estensione dei collegamenti strutturati. Anche per C ++ 20, GCC 10 consente conversioni in array con limite sconosciuto, consente una banale inizializzazione predefinita in contesti constexpr, aggiunge la constinitparola chiave e la depreca  volatile .

Per C2X, la prossima revisione dello standard ISO C, diverse funzionalità sono supportate con la sintassi  -std=c2xe -std+gnu2x. Tra questi ci sono strftimeil controllo formato che supporta l' %OBe %Obformati e UTF-8 costanti carattere utilizzando l'U8' 'sintassi.

GCC, che esiste da più di 33 anni, include front-end e librerie per C, C ++, Fortran, Ada, Go e D. È stato pubblicato un bollettino sul porting in GCC 10. Altre nuove funzionalità in GCC 10.1 includono

  • Sono state aggiunte funzioni integrate, incluso un has_builtinoperatore preprocessore che può essere utilizzato per interrogare il supporto per le funzioni integrate fornite da GCC e altri compilatori che lo supportano. 
  • Sono state aggiunte le opzioni di comando. Questi includono  -fallocation-dce, per rimuovere le coppie non necessarie di newe deleteoperatori e -fanalyzer, per abilitare un nuovo passaggio di analisi statica e gli avvisi associati. Quest'ultima opzione dovrebbe essere considerata in fase sperimentale.
  • Sono stati apportati miglioramenti all'ottimizzazione interprocedurale. Questi includono la reimplementazione del passaggio di sostituzione scalare interprocedurale degli aggregati (IPA-SRA) che è stato reimplementato per funzionare al momento del collegamento. IPA-SRA ora può anche rimuovere l'elaborazione e la restituzione di valori di ritorno inutilizzati.
  • I miglioramenti all'ottimizzazione del tempo di collegamento includono un nuovo binario ito-dump. Il programma può scaricare varie informazioni su un bytefile oggetto LTO .
  • Sono stati apportati miglioramenti all'ottimizzazione basata sui profili, incluso il miglioramento della manutenzione del profilo durante la compilazione e il partizionamento caldo / freddo.
  • Per la famiglia C, la accessfunzione e l' typeattributo sono stati aggiunti per descrivere il modo in cui una funzione accede agli oggetti passati tramite puntatore o riferimento e per associare tali argomenti a argomenti interi che denotano la dimensione dell'oggetto. L'attributo viene utilizzato per abilitare il rilevamento di accessi non validi da parte delle funzioni definite dall'utente. Sono inoltre disponibili nuovi avvisi e miglioramenti agli avvisi esistenti. Un avviso, -Wzero-length-boundsavverte sull'accesso a elementi di array di lunghezza zero che potrebbero sovrapporsi ad altri membri dello stesso oggetto.
  • È stata risolta un'incompatibilità ABI tra C ++ 14 e C ++ 17. Su alcune destinazioni, una classe con un oggetto secondario di dimensione zero verrebbe passata in modo errato quando compilata come C ++ 17 o C ++ 20.