GCC 16

GCC 16

Na een jaar van ontwikkeling gepubliceerd de uitgave van de vrije set van compilers GCC 16.1, de eerste belangrijke release in de nieuwe tak GCC 16.x. In overeenstemming met het versie nummeringssysteem, versie 16.0 werd gebruikt tijdens de ontwikkeling, en kort voor de lancering van GCC 16.1 is er al een tak GCC 17.0, waarvan de volgende belangrijke release GCC 17.1 zal worden gevormd.

Belangrijkste wijzigingen:

  • De standaardmodus voor de programmeertaal C++ is overgeschakeld op het gebruik van de standaard C++20 (dialect GNU C++20, -std=gnu++20) in plaats van de eerder voorgestelde C++17. De implementatie van C++20 in de standaardbibliotheek is aangekondigd als stabiel.
  • De experimentele frontend ga68 voor het compilen van programma's in de programmeertaal Algol 68 is opgenomen.
  • De mogelijkheid om diagnostische informatie in HTML-formaat weer te geven is toegevoegd. Uitgebreidere informatie over de voortgang van het programma is opgenomen in de diagnostische uitvoer in het formaat SARIF, gebaseerd op JSON (ondersteuning voor '-fdiagnostics-format=json' is beëindigd).
  • De optimalisatie tijdens de linking fase (LTO, Link-Time Optimization) is uitgebreid. Een optie '-flto-toplevel-asm-heuristics' is toegevoegd om heuristiek te includeren voor het verbeteren van de codeoptimalisatie met assemblerinvoegingen. De techniek voor speculatieve devirtualisatie (-fdevirtualize-speculatively) is nu niet beperkt tot de transformatie van virtuele methoden en kan worden toegepast bij de transformatie naar directe aanroepen van alle indirecte functieaanroepen, zoals aanroepen via pointers.
  • Ondersteuning voor het vectoriseren van lussen, waarvan het aantal iteraties tijdens de compilatie niet bekend is, is geïmplementeerd. De efficiëntie van het verwerken van voortijdige exits uit de lus (bijvoorbeeld via break) is verhoogd.
  • Experimentele ondersteuning is toegevoegd voor veel mogelijkheden recent goedgekeurde standaard C++26. Bijvoorbeeld, zijn gerealiseerd:
    • Reflectie (Reflection, '-freflection'), waarmee het mogelijk is om elementen van een programma bij de compilatie te volgen en aan te passen. Nieuwe operators zijn toegevoegd:^^ (open-std.org)voor het verkrijgen van meta-informatie over de syntactische constructie en '[:…:]' voor het uitvoeren van de omgekeerde transformatie. Voor de transformatie en verwerking van de verkregen informatie tijdens de inspectie is de bibliotheek std::meta voorgesteld en zijn mogelijkheden zoals berekeningen met constanten beschikbaar.
    • Contractprogrammering (Contracts), waarmee formele specificaties van interfaces kunnen worden gedefinieerd met drie nieuwe operators: pre (voorwaarde), post (na voorwaarde) en contract_assert (bevestiging van voorwaarden). De operator 'pre' definieert de voorwaarden die moeten worden voldaan vóór de aanroep (controle van invoer); 'post' zijn de voorwaarden die na de uitvoering moeten worden nageleefd (vereisten voor uitvoer); contract_assert - voorwaarden voor het opwekken van uitzonderingen. Deze functionaliteit zal beschikbaar komen in GCC 16.
    • De operator 'template for' voor het itereren over elementen, zoals parameterbundels die lijken op tuples, objecten en reflectieresultaten (meta-objecten), in een reguliere loopstijl tijdens de compilatiefase. Bij het uitvoeren van 'template for' wordt de loopbody voor elk element ontvouwd en elke iteratie wordt behandeld in een aparte scope, waarin het element van de volgorde waarover de loop iterates een constante is voor elke iteratie en kan worden gebruikt in constante expressies (constexpr). In de context van reflectie kan 'template for' worden gebruikt om de eigenschappen van klassen of enumeraties te doorlopen.
    • De std::simd bibliotheek voor het parallel uitvoeren van gegevensbewerkingen met behulp van SIMD-instructiesets, zoals AVX-512 en NEON, met de standaard type systeem van C++.
    • De bibliotheken std::inplace_vector, std::optional, std::copyable_function, std::function_ref, std::indirect, std::polymorphic en std::owner_equal.
  • Mogelijkheden die verband houden met de standaard C++23 zijn geïmplementeerd, zoals expliciete levensduurbeheer van objecten en ondersteuning voor de specificatie van de tekenafhankelijkheid van diagnostische berichten.
  • De ondersteuning voor de standaard is uitgebreid C23 (opennet.ru), bijvoorbeeld is de mogelijkheid om de 'counted_by' attribuut te gebruiken voor de controle van de geldigheid van het gebruik van pointers geïmplementeerd.
  • Voortgezet implementatie van de standaarden OpenMP 5.0, 5.1, 5.2 en 6.0 (Open Multi-Processing), die API en methoden definiëren voor het toepassen van parallel programmeren op multi-core en hybride (CPU+GPU/DSP) systemen met gedeeld geheugen en vectorisatieblokken (SIMD). Verbeterd de implementatie van specificaties voor parallel programmeren OpenACC 3.0, 3.3 en 3.4, die middelen definiëren voor het verplaatsen van operaties (offloading) naar GPU's en gespecialiseerde processoren, zoals NVIDIA PTX.
  • In de backend van de x86-architectuur is ondersteuning toegevoegd voor AMD-processors op basis van de Zen6-microarchitectuur (-march=znver6), evenals voor Intel Wildcat Lake (-march=wildcatlake) en Nova Lake (-march=novalake).
  • In de backend voor codegeneratie voor AMD Radeon GPU's (GCN) is ondersteuning geïmplementeerd voor AMD Instinct MI300-versnellers (gfx942).
  • Voor de architecturen RISC-V, ARM, S/390 en LoongArch is ondersteuning voor het type «_BitInt (N)» geïmplementeerd om gehele getallen met een specifiek aantal bits te definiëren.

Bron: linux.org.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster