Rilascio della suite di compilatori GCC 13

Dopo un anno di sviluppo è stata rilasciata la release della suite del compilatore GCC 13.1 gratuita, la prima release significativa nel nuovo branch GCC 13.x. Con il nuovo schema di numerazione delle versioni, durante lo sviluppo è stata utilizzata la versione 13.0 e, poco prima del rilascio di GCC 13.1, era già stato eseguito il fork del ramo GCC 14.0, da cui si formerà la prossima versione significativa di GCC 14.1.

Principali modifiche:

  • Il GCC ha adottato un frontend per la creazione di programmi nel linguaggio di programmazione Modula-2. Supporta il codice di costruzione conforme ai dialetti PIM2, PIM3 e PIM4, nonché allo standard ISO accettato per quella lingua.
  • All'albero dei sorgenti di GCC è stato aggiunto un frontend con l'implementazione del compilatore in linguaggio Rust preparato dal progetto gccrs (GCC Rust). Nella vista corrente, il forntend è contrassegnato come sperimentale e disabilitato per impostazione predefinita. Una volta che il frontend è pronto (previsto nella prossima versione), il toolkit GCC standard può essere utilizzato per compilare programmi Rust senza la necessità di installare il compilatore rustc creato utilizzando gli sviluppi LLVM.
  • Link-in-Step Optimization (LTO) aggiunge il supporto per un job server (jobserver) gestito dal progetto GNU make per ottimizzare l'esecuzione di build parallele su più thread. In GCC, il jobserver viene utilizzato per parallelizzare il lavoro durante l'ottimizzazione LTO nel contesto dell'intero programma (WPA, Whole-program Analysis). Le pipe con nome (--jobserver-style=fifo) vengono utilizzate per impostazione predefinita per interagire con il jobserver.
  • L'analizzatore statico (-fanalyzer) offre 20 nuovi controlli diagnostici, tra cui "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinite -recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • È stata implementata la possibilità di emettere la diagnostica in formato SARIF basato su JSON. Il nuovo formato può essere utilizzato per ottenere risultati di analisi statiche (GCC -fanalyzer), nonché per ottenere informazioni su avvisi ed errori. L'abilitazione viene eseguita con l'opzione "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", dove le opzioni con "json" generano un output in una variante specifica di GCC del formato JSON .
  • Implementate alcune funzionalità definite nello standard C23 C, come la costante nullptr per la definizione di puntatori null, semplificando l'utilizzo di liste con un numero variabile di argomenti (variadic), estendendo le capacità di enum, l'attributo noreturn, consentendo l'utilizzo di constexpr e auto quando si definiscono gli oggetti, typeof e typeof_unqual, le nuove parole chiave alignas, alignof, bool, false, static_assert, thread_local e true, consentono le parentesi vuote all'inizializzazione.
  • Implementate alcune funzionalità definite nello standard C++23, come la possibilità di inserire segni alla fine delle espressioni composte, la compatibilità con il tipo char8_t, la direttiva del preprocessore #warning, delimitata da (\u{}, \o{} , \x{}) e con nome ('\N{LATIN MAIUSCOLA A}') sequenze di escape, operatore statico(), operatore statico[], operatore di uguaglianza all'interno delle espressioni, eccezione di alcune restrizioni sull'uso di constexpr, supporto per UTF-8 nei testi di origine.
  • Supporto sperimentale migliorato per gli standard C++20 e C++23 in libstdc++, come l'aggiunta del supporto per i file di intestazione e std::format, capacità di file di intestazione estesa , aggiunti altri tipi a virgola mobile, file di intestazione implementati E .
  • Aggiunti nuovi attributi di funzione per documentare che un descrittore di file viene passato in una variabile intera: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" e "__attribute__((fd_arg_write(N) ))". Gli attributi specificati possono essere utilizzati in un analizzatore statico (-fanalyzer) per rilevare il lavoro errato con i descrittori di file.
  • È stato aggiunto un nuovo attributo "__attribute__((assume(EXPR)))", con il quale puoi dire al compilatore che l'espressione è vera e il compilatore può usare questo fatto senza valutare l'espressione.
  • Aggiunto il flag "-fstrict-flex-arrays=[level]" per selezionare il comportamento durante l'elaborazione di un elemento dell'array flessibile nelle strutture (membri dell'array flessibile, un array di dimensioni indefinite alla fine della struttura, ad esempio "int b[] ").
  • Aggiunto il flag "-Wenum-int-mismatch" per emettere avvisi in caso di mancata corrispondenza tra un tipo enumerato e un tipo intero.
  • Il front-end Fortran ha il pieno supporto per la finalizzazione.
  • È stato aggiunto al frontend per il linguaggio Go il supporto per funzioni e tipi generici (generics) ed è stata assicurata la compatibilità con i pacchetti per il linguaggio Go 1.18.
  • Il backend AArch64 supporta CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) e Arm Neoverse V2 (neoverse -v2) . Il supporto per gli argomenti "armv9.1-a", "armv9.2-a" e "armv9.3-a" è stato aggiunto all'opzione "-march=". Aggiunto il supporto per le estensioni del processore FEAT_LRCPC, FEAT_CSSC e FEAT_LSE2.
  • Il supporto per le CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) e Arm Cortex-M85 (cortex-m85) è stato aggiunto al backend dell'architettura ARM.
  • Il supporto per i processori Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids e AMD Zen 86 (znver4) è stato aggiunto al backend x4. Sono state implementate le estensioni dell'architettura del set di istruzioni AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT e AMX-COMPLEX proposte nei processori Intel. Per C e C++ su sistemi con SSE2, viene fornito il tipo __bf16.
  • Il backend di generazione del codice per le GPU AMD Radeon (GCN) implementa la possibilità di utilizzare gli acceleratori AMD Instinct MI200 per migliorare le prestazioni OpenMP/OpenACC. Vettorizzazione migliorata utilizzando le istruzioni SIMD.
  • Funzionalità di backend notevolmente ampliate per la piattaforma LoongArch.
  • Aggiunto il supporto per XuanTie C906 (thead-c906) di CPU T-Head nel backend RISC-V. Supporto implementato per i gestori di vettori definiti nella specifica RISC-V Vector Extension Intrinsic 0.11. Aggiunto il supporto per 30 estensioni delle specifiche RISC-V.
  • Quando si generano oggetti condivisi con l'opzione "-shared", il codice di avvio non viene più aggiunto dopo l'aggiunta di un ambiente in virgola mobile se sono abilitate le ottimizzazioni "-Ofast", "-ffast-math" o "-funsafe-math-optimizations" .
  • Il supporto per il formato di debug DWARF è implementato in quasi tutte le configurazioni.
  • Aggiunta l'opzione "-gz=zstd" per comprimere le informazioni di debug utilizzando l'algoritmo Zstandard. Rimosso il supporto per la modalità di compressione delle informazioni di debug deprecata "-gz=zlib-gnu".
  • Aggiunto il supporto iniziale per OpenMP 5.2 (Open Multi-Processing) ed è proseguita l'implementazione degli standard OpenMP 5.0 e 5.1, definendo API e modalità per applicare metodi di programmazione parallela su sistemi multi-core e ibridi (CPU+GPU/DSP) con memoria condivisa e unità di vettorizzazione (SIMD).
  • Il supporto per il formato di archiviazione delle informazioni di debug legacy "STABS" (abilitato dalle opzioni -gstabs e -gxcoff), creato negli anni '1980 e utilizzato nel debugger dbx, è stato interrotto.
  • Supporto obsoleto per Solaris 11.3 (il codice per supportare questa piattaforma verrà rimosso in una versione futura).

Fonte: opennet.ru

Aggiungi un commento