Utgivningen av GCC 15-kompilatorpaketet.

Efter ett Är av utveckling har den fria kompilatoruppsÀttningen GCC 15.1 slÀppts, den första betydande utgÄvan i den nya GCC 15.x-grenen. Enligt versionsnummersteorin anvÀndes version 15.0 under utvecklingen, och kort innan GCC 15.1:s lansering hade gren GCC 16.0 redan skapats, pÄ vilken nÀsta betydande release GCC 16.1 kommer att baseras.

Huvudsakliga förÀndringar:

  • Vid kompilering av program pĂ„ C-sprĂ„ket anvĂ€nds standarden C23 som standard (Ă€ndringar översikt) med GNU-förlĂ€ngningar ("-std=gnu23"). Tidigare anvĂ€ndes standarden C17 som standard — "-std=gnu17". Ändringen kan potentiellt orsaka problem vid byggandet av befintliga projekt pĂ„ grund av inkluderingen av konstanten nullptr, typen _BitInt(n) och nyckelorden bool, true och false som kan krocka med identifierare med samma namn angivna i applikationerna.
  • Funktioner frĂ„n C23-standarden har implementerats:
    • Direktivet "#embed" som anvĂ€nds för att bĂ€dda in binĂ€rresurser i koden.
    • Attributet "unsequenced", som signalerar att resultatet inte beror pĂ„ exekveringsordningen.
    • Attributet "reproducible", som anger att funktionen alltid returnerar samma resultat vid samma indatan, dvs. inte beror pĂ„ andra faktorer.
  • Element frĂ„n den kommande standarden C2Y (-std=c2y och -std=gnu2y) har implementerats:
    • Möjligheten att deklarera variabler inuti "if"-satsen, till exempel "if (int x = get ()) {
}".
    • Stöd för att namnge loopar sĂ„ att de kan refereras till i koden. outer: for (int i = 0; i < IK; ++ i) { switch (i) { case 1: break; // hoppar till CONT1 case 2: break outer; // hoppar till CONT2 } // CONT1 } // CONT2
    • Stöd för att ange intervall av heltal i "case"-uttryck, till exempel "case 1 
 10:".
    • Suffixen "i" och "j" för att indikera den imaginĂ€ra delen i komplexa tal.
    • Möjligheten att anvĂ€nda operatörerna "++" och "—" med komplexa tal.
    • Konstruktionen "_Generic(type, expr1, expr2, 
)" för att vĂ€lja uttryck baserat pĂ„ operandens typ.
    • Stöd för att referera till byte-arrayer som andra typer av objekt, sĂ„som strukturer och unioner.
    • Stöd för att tillĂ€mpa operatören "alignof" pĂ„ ofullstĂ€ndiga arrayer (deklarerade utan storleksangivelse, t.ex. "int a[]").
    • Ny syntax för oktala, hexadecimala och universella escape-sekvenser för tecken har lagts till. IstĂ€llet för «\u», «\x» och «\nnn» erbjuds sekvenserna «\u{}», «\o{}» och «\x{}», som lĂ„ter dig ange ett valfritt antal siffror.
    • Inbyggda funktioner «__builtin_stdc_rotate_left» och «__builtin_stdc_rotate_right».
    • Operationer med nollĂ€ngd tillĂ„ts pĂ„ NULL-pekare (t.ex. «sizeof(*p)»).
  • I frontend för C++-sprĂ„ket har funktioner utvecklats för den framtida standarden C++26:
    • Variabeloperatören «friend» («friend Ts »).
    • Möjligheten att anvĂ€nda nyckelordet «constexpr» med sorten av operatorn «new» (placement new) för att placera ett objekt i förhand tilldelad minne under kompilering.
    • Felmeddelande vid borttagning av en pekare till en ofullstĂ€ndig typ.
    • Syntaxen för att definiera variabla parametrar med tre prickar utan föregĂ„ende kommatecken har förklarats som förĂ„ldrad (till exempel nĂ€r det anges «void e(int
)» istĂ€llet för «void e(int, 
)»).
    • Indexering av parameterpaket i mallar.
    • Attribut för strukturerade bindningar;
    • Syntax ‘= delete(«orsak»)’;
    • Inkludering av «@», «$» och «`» i den basala uppsĂ€ttningen av tecken.
    • AnvĂ€ndning av makron för att deklarera moduler Ă€r förbjudet.
    • Möjlighet att anvĂ€nda strukturerad bindning som condition i if- och switch-uttalanden.
    • Stöd för direkt jĂ€mförelse av arrayer har upphört (t.ex. «int arr1[5]; int arr2[5]; bool same = arr1 == arr2»).
    • Mekanism «#embed» för att inkludera binĂ€ra resurser.
    • Den mallklass is_trivial har förklarats som förĂ„ldrad.
  • Funktioner för C++23 har lagts till:
    • Förbud mot vissa anvĂ€ndningar av direktivet «export» och tillĂ„telse att anvĂ€nda «export {}».
    • Stöd för att förlĂ€nga livslĂ€ngden för temporĂ€ra objekt i «for»-loopar som itererar över omrĂ„den.
  • I libstdc++-biblioteket har experimentellt stöd för moduler std och std.compat införts.
  • AnvĂ€ndning av initialiseraren «{0}» för unioner i C- och C++-kod garanterar nu inte rensning av hela innehĂ„llet, utan sĂ€tter bara den första unionselementet till noll. För att rensa hela unionen bör uttrycket «{}» anvĂ€ndas, vilket definieras i C23-specifikationen, eller ange alternativet «-fzero-init-padding-bits=unions» för att Ă„terfĂ„ det gamla beteendet.
  • Stöd för attributet «musttail» ([[gnu::musttail]] och [[clang::musttail]]) har införts för garanterade svansanrop. Attributet tillĂ€mpas pĂ„ return-uttryck dĂ€r en rekursiv anrop av den aktuella funktionen görs, och garanterar att sĂ„dana anrop kommer att anvĂ€nda svansrekursion, vilket inte allokerar ytterligare minne pĂ„ stacken (minimerar risken för minnesutarmning vid ett mycket stort antal anrop).
  • Stöd för attributet flag_enum ([[gnu::flag_enum]] och [[clang::flag_enum]]) har implementerats, vilket tillĂ€mpas pĂ„ upprĂ€kningar för att indikera att innehĂ„llet anvĂ€nds i bitoperationer (exkluderar varningsutskrift i lĂ€get "-Wswitch").
  • Stöd för attributet "counted_by" har lagts till, som gör att man kan ange ett fĂ€lt i en struktur med en flexibel array som definierar antalet element. Attributet kan anvĂ€ndas för att öka effektiviteten i grĂ€nskontrollera.
  • För funktioner har attributet "nonnull_if_nonzero" lagts till, vilket anger att vissa funktionsparameter med pekare kan vara NULL, endast om en annan parameter Ă€r noll.
  • AnvĂ€ndning av utökade assemblerinsĂ€ttningar "asm (
.)" utanför funktioner har tillĂ„tits. I assemblerinsĂ€ttningar Ă€r det tillĂ„tet att skriva över minnet i den röda zonen av stacken (omrĂ„det högst upp pĂ„ stacken).
  • Kompilering av C++-kod har accelererats tack vare förbĂ€ttrad hashning av mallar.
  • Nya optimeringar har lagts till. Stöd för vektorisering av loopar dĂ€r det finns kod för för tidig utgĂ„ng (t.ex. genom anrop av break eller return), Ă€ven om sĂ„dana loopar manipulerar dynamiskt allokerade arrayer eller buffertar vars storlek Ă€r okĂ€nd vid kompilering. Vektorisering av vissa lĂ€tt vektorisering loopar Ă€r aktiverad med alternativet "-O2", dĂ€r information om antalet iterationer (tripcount) saknas.
  • Ett lĂ€ge för inkrementell optimering vid lĂ€nkning (LTO, Link-Time Optimization) har lagts till, vilket avsevĂ€rt minskar tiden för omkompilering vid anvĂ€ndning av LTO i situationer dĂ€r smĂ„ förĂ€ndringar har gjorts i koden (en funktion har redigerats). För att aktivera det inkrementella lĂ€get föreslĂ„s alternativet "-flto-incremental".
  • Kompileringen av mycket stora ingĂ„ngsfiler har förbĂ€ttrats. SpĂ„rning av kolumnnummer som överskrider 4096 har implementerats. Noggrannheten i att ange platsen för fel och varningar i mycket stora filer har ökat.
  • Tydligheten i rapporter vid diagnostisering av problem har ökat. Till exempel Ă€r platsen för problemet framhĂ€vd med symbolen "⚠", utformningen av utskriften har Ă€ndrats vid fel i C++-mallar, tips har lagts till för att förenkla övergĂ„ngen till standarden C23, och fĂ€rgschemat har omarbetats. Möjlighet till diagnosutskrift i formatet Sarif (-fdiagnostics-format=sarif-file) har lagts till.
  • Biblioteket libgdiagnostics har implementerats, vilket gör det möjligt att integrera GCC:s funktioner för formatering av diagnosmeddelanden i sina projekt (till exempel kan man anvĂ€nda verktyg för citat, syntaxmarkering och felrĂ€ttningstips).
  • Varningarna "-Wtrailing-whitespace" och "-Wleading-whitespace" har lagts till för att identifiera kvarvarande mellanslag i slutet av rader och överflödiga mellanslag i början av rader.
  • Varningen "-Wheader-guard" har lagts till för att informera om problem med makron för skydd av headerfiler som förhindrar att samma headerfil inkluderas flera gĂ„nger.
  • Frontend för sprĂ„k D har uppdaterats till version 2.111.0.
  • Frontend för sprĂ„k Fortran har lagt till stöd för osignerade heltal.
  • Kompilatorn för sprĂ„ket COBOL - gcobol, har inkluderats, och stödjer plattformar x86-64 och AArch64, och Ă€r inte avsedd för anvĂ€ndning pĂ„ 32-bitars system. Kompilatorn implementerar specifikationen ISO/IEC 1989:2023 och klarar de flesta testerna NIST CCVS/85.
  • Implementeringen av standarderna OpenMP 5.0, 5.1, 5.2 och 6.0 (Open Multi-Processing), som definierar API och metoder för tillĂ€mpning av parallell programmering pĂ„ flerprocessor- och hybrid (CPU+GPU/DSP) system med delad minne och vektorisering (SIMD), har fortsatt. Stöd för metadirektiv och konstruktioner som tile, unroll, interop och dispatch har lagts till. För vissa AMD- och NVIDIA-GPU:er har stöd för enhetligt delat minne lagts till (aktiveras genom att ange unified_shared_memory i direktivet "requires"). Stöd för uttrycket "self_maps" har lagts till.
  • Backend för arkitekturen AArch64 har fĂ„tt stöd för plattformen MinGW (aarch64-w64-mingw32). Mer Ă€n 20 ARM8-tillĂ€gg har implementerats och stödet för tillĂ€gget ACLE (Arm C Language Extensions) har förbĂ€ttrats. Flera förbĂ€ttringar har lagts till i kodgeneratorn. Stöd har lagts till för CPU:
    • 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 (grace)
    • NVIDIA Olympus (olympus)
    • Qualcomm Oryon-1 (oryon-1)
  • Backend för kodgenerering för GPU AMD Radeon (GCN) har implementerat stöd för biblioteket libstdc++ och lagt till experimentellt stöd för kodgenerering för enheter i serierna gfx9-generic, gfx10-3-generic och gfx11-generic.
  • Backend för x86-arkitekturen har fĂ„tt stöd för utvidgningar av Intel AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS. Stöd har lagts till för Intel Diamond Rapids och Xeon Phi CPU:er.
  • Möjligheterna för backend har utökats för LoongArch- och AVR-plattformar.
  • Stödet för mĂ„larkitekturen nios2, som anvĂ€nds i Nios II-processorer, har tagits bort. Stödet för ABI ILP32 (-mabi=ilp32) i AArch64-porten har förklarats som förĂ„ldrat och kommer att tas bort i nĂ€sta större version.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster