Liberazione di a suite di compilatori GCC 15

Dopu un annu di sviluppu, a suite di compilatore GCC gratuitu GCC 15.1 hè stata liberata, a prima liberazione maiò in a nova filiera GCC 15.x. Sicondu u schema di numerazione di liberazione, a versione 15.0 hè stata aduprata durante u sviluppu, è pocu prima di a liberazione di GCC 15.1, un ramu di GCC 16.0 era digià statu bifurcatu, chì formarà a basa di a prossima versione maiò, GCC 16.1.

I cambiamenti principali:

  • Quandu compilate i prugrammi C, u standard C23 (Change Summary) cù estensioni GNU ("-std=gnu23") hè utilizatu per difettu. Nanzu, u standard C17 era usatu per difettu (-std = gnu17). U cambiamentu puderia causà prublemi quandu custruiscenu prughjetti esistenti per l'inclusione di a constante nullptr, u tipu _BitInt (n) è e parolle chjave bool, true è false, chì puderanu cunflittu cù identificatori di nomi simili definiti in applicazioni.
  • E seguenti capacità di u standard C23 sò state implementate:
    • A direttiva "#embed" hè pensata per incrustà risorse binari in u codice.
    • L'attributu "unsequenced", chì indica chì u risultatu ùn dipende micca di l'ordine di esicuzzioni.
    • L'attributu "reproducible" indica chì a funzione torna sempre u stessu risultatu datu u stessu input, vale à dì ùn dipende micca di altri fattori.
  • Elementi di u futuru standard C2Y sò stati implementati (-std=c2y è -std=gnu2y):
    • Capacità di dichjarà variabili in una dichjarazione "se", cum'è "if (int x = get ()) {...}".
    • Supportu per i loops di nomi per riferite à elli in u codice. esterno: per (int i = 0; i < IK; ++ i) { switch (i) { casu 1: ruttura; // salta à CONT1 casu 2: rumpi fora; // salta à CONT2 } // CONT1 } // CONT2
    • Supportu per specificà intervalli di valori interi in espressioni di casu, cum'è "casu 1...10:".
    • I suffissi "i" è "j" per denotà a parte imaginaria in numeri cumplessi.
    • A pussibilità di utilizà l'operatori "++" è "—" cù numeri cumplessi.
    • A custruzzione "_Generic(type, expr1, expr2, ...)" per selezziunà una espressione basatu annantu à u tipu d'operandu.
    • Supportu per accede à e matrici di byte cum'è altri tipi d'uggetti, cum'è strutture è unioni.
    • Supportu per applicà l'operatore "alignof" à arrays incompleti (quelli dichjarati senza specificà una dimensione, cum'è "int a[]").
    • Aggiunta una nova sintassi per e sequenze di escape di caratteri ottali, esadecimali è universali. Invece di "\u", "\x" è "\nnn", sò pruposti e sequenze "\u{}", "\o{}" è "\x{}", in quale pò esse specificatu ogni numeru di cifre.
    • Funzioni integrate "__builtin_stdc_rotate_left" è "__builtin_stdc_rotate_right".
    • L'operazioni di lunghezza zero nantu à i puntatori NULL sò permesse (per esempiu "sizeof(*p)").
  • U frontend per a lingua C++ implementa funzioni chì sò sviluppate per u futuru standard C++ 26:
    • Operatore variativu "amicu" ("amicu Ts...").
    • A capacità d'utilizà a chjave constexpr cù una variazione di u novu operatore (piazzamentu novu) per mette un ughjettu in memoria pre-assignata à tempu di compilazione.
    • Errore di output quandu sguassate un puntatore à un tipu incompletu.
    • A sintassi per a definizione di parametri variadici cù un ellipsi senza una virgola precedente (per esempiu, quandu si specifica "void e(int...)" invece di "void e(int, ...)") hè stata deprecata.
    • Indexazione di un pacchettu di parametri in mudelli.
    • Attributi per ligami strutturati;
    • Sintassi '= delete("ragiuni"');
    • Inclusione di "@", "$" è "`" in u set di caratteri di basa.
    • L'usu di macros per dichjarà moduli hè pruibitu.
    • Capacità d'utilizà ubligatoriu strutturatu cum'è una cundizione in dichjarazioni if ​​and switch.
    • U supportu per a comparazione diretta di array (per esempiu "int arr1[5]; int arr2[5]; bool same = arr1 == arr2") hè stata interrotta.
    • U mecanismu "#embed" per incrustà risorse binari.
    • A classe di mudellu is_trivial hè stata deprecata.
  • Funzioni C++ 23 aghjunte:
    • Disallow certi usi di a direttiva "export" è permette l'usu di "export {}".
    • Supportu per allargà a vita di l'uggetti tempuranee in i loops chì iteranu in intervalli.
  • A libreria libstdc++ implementa un supportu sperimentale per i moduli std è std.compat.
  • Aduprà l'inizializazione "{0}" per i sindicati in u codice C è C++ ùn guarantisci più chì tutti i cuntenuti sò sbulicati, ma invece risultati in u primu elementu di l'unione hè zero. Per sguassà tutta l'unione, utilizate l'espressione "{}" definita in a specificazione C23, o specificate l'opzione "-fzero-init-padding-bits=unions" per restaurà u vechju cumpurtamentu.
  • Supportu implementatu per l'attributu "musttail" ([[gnu::musttail]] è [[clang::musttail]]) per i chjami di coda garantiti. L'attributu s'applica à e dichjarazioni di ritornu chì facenu una chjama recursiva à a funzione attuale, è assicura chì una tale chjamata utilizerà a ricursione di a cuda, chì ùn attribuisce micca memoria supplementu nantu à a pila (eliminendu u risicu di esce da memoria cù un gran numaru di chjama).
  • U supportu implementatu per l'attributu flag_enum ([[gnu::flag_enum]] è [[clang::flag_enum]]) appiicatu à l'enumerazioni per indicà chì i cuntenuti sò usati in operazioni di bit (impedisce avvirtimenti in u modu -Wswitch).
  • Aghjunghje supportu per l'attributu "counted_by", chì pò esse usatu per specificà un campu in una struttura cù un array flexible chì determina u numeru di elementi. L'attributu pò esse usatu per migliurà l'efficienza di i cuntrolli di u buffer overflow.
  • L'attributu "nonnull_if_nonzero" aghjuntu à e funzioni, chì specifica chì certi paràmetri di funzione cù punters ponu esse NULL solu se un altru paràmetru hè zero.
  • L'assemblatore esteso inline "asm (...)" funzioni esterne hè permessu. In l'inserzioni di assembler, hè permessu di sovrascrive a memoria in a zona rossa di a pila (l'area in a cima di a pila).
  • A compilazione di u codice C ++ hè più veloce grazia à l'hashing di u mudellu migliuratu.
  • Aghjunghjite novi ottimisazioni. U supportu hè statu implementatu per i loops di vettorizazione chì cuntenenu codice per a uscita anticipata (per esempiu, via una pausa o una chjama di ritornu), ancu s'ellu tali loops manipulanu arrays o buffers dinamicamente attribuiti chì a dimensione hè scunnisciuta in tempu di compilazione. Quandu l'opzione -O2 hè specificata, a vectorizazione di certi loops facilmente vectorizable per i quali l'infurmazione di tripcount ùn hè micca dispunibule hè attivata.
  • Aggiuntu un modu di ottimisazione incrementale in u stadiu di ligame (LTO, Link-Time Optimization), chì riduce significativamente u tempu di recompilazione quandu si usa LTO in situazioni induve sò stati fatti cambiamenti minori à u codice (una funzione hè stata editata). Per attivà u modu incrementale, l'opzione "-flto-incremental" hè pruposta.
  • Cumpilazione mejorata di schedarii di input assai grande. Implementatu u seguimentu di i numeri di colonna più grande di 4096. A precisione mejorata di indicà u locu di l'errori è avvirtimenti in schedarii assai grande.
  • Visibilità mejorata di i rapporti quandu diagnostica i prublemi. Per esempiu, u locu di u prublema hè evidenziatu cù u simbulu "⚠️", u layout di l'output per l'errore in i mudelli C++ hè statu cambiatu, i suggerimenti sò stati aghjunti per simplificà a transizione à u standard C23, è u schema di culore hè statu riprogettatu. Aggiunta a capacità di produzzione di diagnostichi in u formatu Sarif (-fdiagnostics-format=sarif-file).
  • A libreria libgdiagnostics hè stata implementata, chì vi permette di integrà e capacità di GCC in relazione à u disignu di missaghji di diagnostichi in i vostri prughjetti (per esempiu, pudete aduprà citazione, evidenziazione è suggerimenti di correzione).
  • Aghjunghjite "-Wtrailing-whitespace" è "-Wleading-whitespace" avvirtimenti per detectà spazi bianchi residuali à a fine di e linee è spazi bianchi extra à l'iniziu di e linee.
  • Aggiuntu "-Wheader-guard" avvisu per signalà i prublemi in i macros di guardia di l'intestazione chì impediscenu un schedariu di header da esse inclusu di novu.
  • U frontend per a lingua D hè stata aghjurnata à a versione 2.111.0.
  • U supportu per interi senza firmatu hè statu aghjuntu à u frontend di Fortran.
  • U pacchettu include un compilatore per a lingua COBOL, gcobol, chì sustene e plataforme x86-64 è AArch64 è ùn hè micca pensatu per l'usu in sistemi 32-bit. U compilatore implementa a specificazione ISO / IEC 1989: 2023 è passa a maiò parte di e teste NIST CCVS / 85.
  • L'implementazione di i standard OpenMP 5.0, 5.1, 5.2 è 6.0 (Open Multi-Processing), chì definiscenu l'API è i metudi per applicà metudi di prugrammazione parallela in sistemi multi-core è hibridi (CPU + GPU / DSP) cù unità di memoria è vectorization (SIMD) spartuti, hè stata cuntinuata. Aggiuntu supportu per metadirettivi è tile, unroll, interop è custruzzioni di dispatch. Per alcune GPU AMD è NVIDIA, u supportu per a memoria spartuta unificata hè stata aghjunta (attivata da specificà unified_shared_memory in a direttiva "requires"). Aghjunghje supportu per l'espressione "self_maps".
  • U backend per l'architettura AArch64 hè stata aghjurnata per sustene a piattaforma MinGW (aarch64-w64-mingw32). Più di 20 estensioni ARM8 sò state implementate è u supportu per l'estensione ACLE (Arm C Language Extensions) hè statu migliuratu. Numerosi miglioramenti sò stati fatti à u generatore di codice. Supportu CPU aghjuntu:
    • Apple A12 (apple-a12)
    • Apple M1 (apple-m1)
    • Apple M2 (apple-m2)
    • Apple M3 (apple-m3)
    • Arm Cortex-A520AE (cortex-a520ae)
    • Arm Cortex-A720AE (cortex-a720ae)
    • Arm Cortex-A725 (cortex-a725)
    • Arm Cortex-R82AE (cortex-r82ae)
    • Arm Cortex-X925 (cortex-x925)
    • Arm Neoverse N3 (neoverse-n3)
    • Arm Neoverse V3 (neoverse-v3)
    • Arm Neoverse V3AE (neoverse-v3ae)
    • FUJITSU-MONAKA (fujitsu-monaka)
    • NVIDIA Grace
    • NVIDIA Olympus (Olympus)
    • Qualcomm Oryon-1 (Oryon-1)
  • U backend di generazione di codice AMD Radeon GPU (GCN) hè statu aghjurnatu per sustene a libreria libstdc++ è u supportu di generazione di codice sperimentale hè statu aghjuntu per a serie di dispositivi gfx9-generic, gfx10-3-generic è gfx11-generic.
  • U backend x86 supporta avà l'estensioni di l'architettura di set di istruzioni Intel AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS. Supportu aghjuntu per i CPU Intel Diamond Rapids è Xeon Phi.
  • Capacità di backend ampliate per e piattaforme LoongArch è AVR.
  • Eliminatu u supportu per l'architettura di destinazione nios2 utilizata in i processori Nios II. U supportu per l'ILP32 ABI (-mabi = ilp32) in u portu AArch64 hè statu deprecatu è serà sguassatu in a prossima versione maiò.

Source: opennet.ru

Add a comment