GCC 16

GCC 16

Efter ett Ärs utveckling publicerades utslÀpp av den fria uppsÀttningen kompilatorer GCC 16.1, den första betydande versionen i den nya grenen GCC 16.x. I enlighet med versionsnumreringssystemet, version 16.0 anvÀndes under utvecklingen, och strax innan lanseringen av GCC 16.1 avleddes redan en gren GCC 17.0, pÄ grundval av vilken nÀsta betydande release GCC 17.1 kommer att bildas.

Huvud för:

  • StandardlĂ€ge för C++-sprĂ„ket har Ă€ndrats till att anvĂ€nda standarden C++20 (GNU C++20-dialekten, -std=gnu++20) istĂ€llet för den tidigare föreslagna C++17. Implementeringen av C++20 i standardbiblioteket har deklarerats stabil.
  • En experimentell frontend har inkluderats ga68 för att kompilera program skrivna i programmeringssprĂ„ket Algol 68.
  • Möjligheten att generera diagnostisk information i HTML-format har lagts till. Information om programmets körning har utvidgats, vilket inkluderas vid utskrift av diagnoser i formatet SARIF, baserat pĂ„ JSON (stödet för «-fdiagnostics-format=json» har upphört).
  • Optimeringar under lĂ€nksteget (LTO, Link-Time Optimization) har utvidgats. Alternativet «-flto-toplevel-asm-heuristics» har lagts till, vilket inkluderar heuristik för att förbĂ€ttra kodoptimeringen med assemblerinsĂ€ttningar. Tekniken för spekulativ devirtualisering (-fdevirtualize-speculatively) Ă€r nu inte begrĂ€nsad till transformation av virtuella metoder och kan tillĂ€mpas vid omvandling till direkta anrop av alla indirekta funktionsanrop, till exempel anrop genom pekare.
  • Stöd för vektorisering av loopar dĂ€r antalet iterationer Ă€r okĂ€nt vid kompilering har implementerats. Effektiviteten vid hantering av tidiga utgĂ„ngar frĂ„n loopar (till exempel via break) har ökat.
  • Experimentellt stöd har lagts till mĂ„nga funktionerna nyligen godkĂ€nda standarder. C++26. Till exempel har följande implementerats:
    • Reflektion (Reflection, «-freflection»), vilket möjliggör spĂ„rning och modifiering av programmelement under kompilering. Nya operatörer «^^ (open-std.org)» har lagts till för att fĂ„ metainformation om grammatisk struktur och «[:
:]» för att utföra omvandlingen. För omvandling och behandling av information som erhĂ„llits genom inspektion har biblioteket std::meta föreslagits, och sĂ„dana funktioner som berĂ€kningar med konstanter finns tillgĂ€ngliga.
    • Kontraktprogrammering (Contracts), som gör det möjligt att specificera formella grĂ€nssnittsspecifikationer med hjĂ€lp av tre nya operatorer: pre (förutsĂ€ttning), post (eftervillkor) och contract_assert (pĂ„stĂ„endekontroll). Operatorn „pre“ definierar de förutsĂ€ttningar som mĂ„ste uppfyllas före anropet (validering av indata); „post“ – villkor som mĂ„ste uppfyllas efter att operationen har genomförts (krav pĂ„ utdata); contract_assert – villkor för hur undantag uppstĂ„r. Denna funktionalitet kommer att bli tillgĂ€nglig i GCC 16.
    • Operatorn „template for“ för att iterera över element som parameterpaket, tuple-liknande objekt och resultat av reflektion (metaobjekt) under kompilering i stil med vanliga loopar. NĂ€r „template for“ körs, expanderas loopens kropp för varje element och varje iteration behandlas i ett separat synfĂ€lt dĂ€r det itererade elementet Ă€r en konstant för varje iteration och kan ingĂ„ i konstanta uttryck (constexpr). I kontexten av reflektion kan „template for“ anvĂ€ndas för att iterera över klasser eller enumerationsegenskaper.
    • Biblioteket std::simd för att parallellisera utförande av operationer pĂ„ data med hjĂ€lp av SIMD-instruktionsuppsĂ€ttningar, sĂ„som AVX-512 och NEON, med standard C++ typ system.
    • Biblioteken std::inplace_vector, std::optional<T&>, std::copyable_function, std::function_ref, std::indirect, std::polymorphic och std::owner_equal.
  • Funktioner relaterade till C++23-standarden har implementerats, sĂ„som explicita hantering av objektlivscykler och stöd för angivning av teckenkodning för diagnostiska meddelanden.
  • Stöd för standarder har utvidgats C23 (opennet.ru), till exempel har möjligheten att anvĂ€nda attributet „counted_by“ implementerats för att verifiera korrekt anvĂ€ndning av pekare.
  • FortsĂ€tter implementering av standarder OpenMP 5.0, 5.1, 5.2 och 6.0 (Open Multi-Processing), som definierar API:er och metoder för tillĂ€mpning av parallellprogrammeringsmetoder pĂ„ flerordnings- och hybrid (CPU+GPU/DSP) system med gemensam minne och vektorisering (SIMD). FörbĂ€ttrad implementering av specifikationer för parallellprogrammering OpenACC 3.0, 3.3 och 3.4, som definierar verktyg för offloading-operationer pĂ„ GPU och specialiserade processorer som NVIDIA PTX.
  • Stöd för AMD-processorer baserade pĂ„ Zen6 mikroarkitektur (-march=znver6) har lagts till backend för x86-arkitekturen, liksom för Intel Wildcat Lake (-march=wildcatlake) och Nova Lake (-march=novalake) processorer.
  • I backend-koden för GPU AMD Radeon (GCN) har stödet för acceleratorer AMD Instinct MI300 (gfx942) implementerats.
  • För arkitekturerna RISC-V, ARM, S/390 och LoongArch har stödet för typen «_BitInt (N)» implementerats för att definiera heltal med angivet antal bitar.

KĂ€lla: linux.org.ru

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