Liberazione di a suite di compilatori GCC 13

Dopu un annu di sviluppu, a liberazione di a suite di compilatore GCC 13.1 gratuitu hè stata liberata, a prima liberazione significativa in a nova filiera GCC 13.x. Sottu à u novu schema di numerazione di liberazione, a versione 13.0 hè stata aduprata durante u sviluppu, è pocu prima di a liberazione di GCC 13.1, u ramu GCC 14.0 era digià furcatu, da quale serà furmatu a prossima liberazione significativa di GCC 14.1.

I cambiamenti principali:

  • U GCC hà aduttatu un frontend per custruisce prugrammi in a lingua di prugrammazione Modula-2. Supporta u codice di custruzzione chì cunforma à i dialetti PIM2, PIM3 è PIM4, è ancu u standard ISO accettatu per quella lingua.
  • Un frontend cù l'implementazione di u compilatore di lingua Rust preparatu da u prughjettu gccrs (GCC Rust) hè statu aghjuntu à l'arbulu fonte GCC. In a vista attuale, u forntend hè marcatu cum'è sperimentale è disattivatu per automaticamente. Quandu u frontend hè prontu (aspittatu in a prossima versione), u toolkit GCC standard pò esse usatu per cumpilà i prugrammi Rust senza a necessità di installà u compilatore rustc custruitu cù sviluppi LLVM.
  • Link-in-Step Optimization (LTO) aghjusta u supportu per un servitore di travagliu (jobserver) mantinutu da u prughjettu GNU Make per ottimisà l'esecuzione di custruzzione parallela in parechje fili. In GCC, u jobserver hè adupratu per parallelizà u travagliu durante l'ottimisazione LTO in u cuntestu di tuttu u prugramma (WPA, Analisi di u prugramma tutale). I tubi chjamati (--jobserver-style=fifo) sò usati per difettu per cumunicà cù u jobserver.
  • L'analizzatore staticu (-fanalyzer) offre 20 novi cuntrolli diagnostichi, cumprese "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinite -recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • A capacità di produzzione di diagnostichi in formatu SARIF basatu in JSON hè stata implementata. U novu furmatu pò esse usatu per ottene risultati di l'analisi statica (GCC -fanalyzer), è ancu per uttene infurmazioni nantu à avvisi è errori. L'attivazione hè fatta cù l'opzione "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", induve l'opzioni cù "json" risultanu in output in una variante specifica GCC di u formatu JSON. .
  • Implementatu alcune caratteristiche definite in u standard C23 C, cum'è a constante nullptr per a definizione di puntatori nulli, facendu più faciule d'utilizà listi cù un numeru variabile di argumenti (variadic), allargendu e capacità di enums, l'attributu noreturn, chì permette l'usu di constexpr è autumàticu quandu definisce l'uggetti, u typeof è typeof_unqual, novi parole chjave alignas, alignof, bool, false, static_assert, thread_local è true, chì permettenu parentesi vacanti nantu à l'inizializazione.
  • Implementatu alcune caratteristiche definite in u standard C++ 23, cum'è a capacità di mette marchi à a fine di l'espressioni cumposti, a cumpatibilità cù u tipu char8_t, a direttiva di preprocessore #warning, delimitata da (\u{}, \o{} , \x{}), è chjamatu ('\N{LETTERA LATINA CAPITAL A}') sequenze di escape, operatore staticu (), operatore staticu [], operatore di uguaglianza in l'espressioni, eccezzioni di alcune restrizioni à l'usu di constexpr, supportu per UTF-8 in testi fonte.
  • libstdc ++ hà migliuratu u supportu sperimentale per i standard C ++ 20 è C ++ 23, cum'è l'aghjunzione di supportu per i file header è std::format, capacità di file header estese , Tipi di virgule flottante supplementari aghjuntu, fugliali di header implementati È .
  • Aggiunti novi attributi di funzione per documentà chì un descrittore di file hè passatu in una variabile intera: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))", è "__attribute__((fd_arg_write(N)) )) ". L'attributi specificati ponu esse aduprati in un analizatore staticu (-fanalyzer) per detectà u travagliu incorrectu cù descriptori di file.
  • Un novu attributu "__attribute__((assume(EXPR)))" hè statu aghjuntu, cù quale pudete dì à u compilatore chì l'espressione hè vera è u compilatore pò aduprà stu fattu senza evaluà l'espressione.
  • Aggiuntu "-fstrict-flex-arrays=[level]" flag per selezziunà u cumpurtamentu quandu si tratta un elementu di array flexible in strutture (Membri Flexible Array, un array di dimensione indefinita à a fine di a struttura, per esempiu, "int b[] ").
  • Aggiunta a bandiera "-Wenum-int-mismatch" per emette avvirtimenti s'ellu ci hè una discrepanza trà un tipu enumeratu è un tipu interu.
  • U front-end Fortran hà un supportu tutale per a finalizazione.
  • U supportu per e funzioni è i tipi generichi (generici) hè statu aghjuntu à u front end per a lingua Go, è a cumpatibilità cù i pacchetti per a lingua Go 1.18 hè stata assicurata.
  • U backend AArch64 supporta CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) è Arm Neoverse V2 (neoverse -v2) . U supportu per l'argumenti "armv9.1-a", "armv9.2-a" è "armv9.3-a" hè statu aghjuntu à l'opzione "-march=". Aghjunghje supportu per l'estensioni di processore FEAT_LRCPC, FEAT_CSSC è FEAT_LSE2.
  • U supportu per i CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) è Arm Cortex-M85 (cortex-m85) CPU hè statu aghjuntu à u backend di l'architettura ARM.
  • U supportu per i processori Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids è AMD Zen 86 (znver4) hè statu aghjuntu à u backend x4. L'estensioni di l'architettura di set di istruzioni AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT è AMX-COMPLEX pruposte in i processori Intel sò state implementate. Per C è C++ nantu à i sistemi cù SSE2, u tipu __bf16 hè furnitu.
  • U backend di generazione di codice per AMD Radeon GPU (GCN) implementa a capacità di utilizà l'acceleratori AMD Instinct MI200 per migliurà u rendiment OpenMP / OpenACC. Vettorizazione mejorata cù l'istruzzioni SIMD.
  • Capacità di backend significativamente ampliate per a piattaforma LoongArch.
  • Aggiuntu supportu per CPU T-Head's XuanTie C906 (thead-c906) in u backend RISC-V. Supportu implementatu per i gestori di vettori definiti in a specificazione RISC-V Vector Extension Intrinsic 0.11. Aggiuntu supportu per 30 estensioni di specificazione RISC-V.
  • Quandu si genera oggetti spartuti cù l'opzione "-shared", u codice di startup ùn hè più aghjuntu dopu avè aghjustatu un ambiente in virgule flottante se l'ottimisazioni "-Ofast", "-ffast-math", o "-funsafe-math-optimizations" sò attivati. .
  • U supportu per u formatu di debugging DWARF hè implementatu in quasi tutte e cunfigurazioni.
  • Aggiunta l'opzione "-gz=zstd" per cumpressà l'infurmazioni di debug cù l'algoritmu Zstandard. Eliminatu u supportu per u modu di cumpressione di l'infurmazioni di debug obsoleti "-gz=zlib-gnu".
  • U supportu iniziale per OpenMP 5.2 (Open Multi-Processing) hè statu aghjuntu è l'implementazione di i standard OpenMP 5.0 è 5.1 hà cuntinuatu, definendu API è metudi per applicà metudi di prugrammazione parallela in sistemi multi-core è hibridi (CPU + GPU / DSP) cù Unità di memoria è vettorizazione cumuni (SIMD).
  • Supportu obsoletu per u formatu di almacenamentu di l'infurmazioni di debug STABS legacy (attivatu cù l'opzioni -gstabs è -gxcoff), creatu in l'anni 1980 è utilizatu in u debugger dbx.
  • U supportu obsoletu per Solaris 11.3 (u codice per supportà sta piattaforma serà eliminatu in una futura versione).

Source: opennet.ru

Add a comment