GCC 16

GCC 16

Nach einem Jahr Entwicklung veröffentlicht Veröffentlichung des freien Compiler-Set GCC 16.1, die erste bedeutende Veröffentlichung im neuen Zweig GCC 16.x. Gemäß dem Versionsnummerierungsschema, wurde Version 16.0 während der Entwicklungsphase verwendet, und kurz vor der Veröffentlichung von GCC 16.1 wurde bereits der Zweig GCC 17.0, auf dessen Basis die nächste bedeutende Version GCC 17.1 gebildet wird.

Haupt eingeführt wurde, die im Januar dieses Jahres in den Kernel übernommen wurde. Es betrifft ausschließlich die Version 5.1 und tritt in den meisten Fällen auf Systemen mit Samsung-SSD-Speichern auf, bei denen zur Verschlüsselung Daten mit dm-crypt/LUKS über device-mapper/LVM verwendet werden.:

  • Der Standardmodus für die Programmiersprache C++ wurde auf die Verwendung des Standards C++20 (-dialekt GNU C++20, -std=gnu++20) umgeschaltet, anstelle des zuvor vorgeschlagenen C++17. Die Implementierung von C++20 in der Standardbibliothek wurde als stabil erklärt.
  • Umfang enthält ein experimentelles Frontend ga68 , um Programme in der Programmiersprache Algol 68 zu kompilieren.
  • Die Möglichkeit zur Ausgabe diagnostischer Informationen im HTML-Format wurde hinzugefügt. Die Informationen über den Programmablauf wurden erweitert, die bei der Diagnose im Format SARIF, basierend auf JSON (Unterstützung für „-fdiagnostics-format=json“ wurde eingestellt) ausgegeben werden.
  • Die Optimierungen in der Bindungsphase (LTO, Link-Time Optimization) wurden erweitert. Eine neue Option «-flto-toplevel-asm-heuristics» wurde hinzugefügt, die Heuristiken zur Verbesserung der Codeoptimierung mit eingebetteten Assembleranweisungen umfasst. Die Technik der spekulativen Devirtualisierung (-fdevirtualize-speculatively) ist nun nicht mehr auf die Umwandlung virtueller Methoden beschränkt und kann bei der Umwandlung jeder indirekten Funktionsaufrufe in direkte Aufrufe angewendet werden, z. B. Aufrufe über Zeiger.
  • Die Unterstützung für die Vektorisierung von Schleifen, deren Anzahl der Iterationen zum Zeitpunkt der Kompilierung unbekannt ist, wurde implementiert. Die Effizienz bei der Verarbeitung vorzeitiger Schleifenausgänge (z. B. über break) wurde erhöht.
  • Experimentelle Unterstützung hinzugefügt viele den Möglichkeiten vor kurzem genehmigten Standards C++26. Zum Beispiel wurden implementiert:
    • Reflexion (Reflection, «-freflection»), die es ermöglicht, Elemente eines Programms während der Kompilierungsphase zu verfolgen und zu modifizieren. Neue Operatoren «^^ (open-std.org)» wurden hinzugefügt, um Metainformationen über grammatikalische Konstrukte zu erhalten, sowie «[:…:]» für die Rückumwandlung. Zur Umwandlung und Verarbeitung der beim Inspektieren gewonnenen Informationen wurde die Bibliothek std::meta vorgeschlagen, und es stehen Funktionen wie Berechnungen mit Konstanten zur Verfügung.
    • Vertragliches Programmieren (Contracts), das die Definition von formalen Schnittstellspezifikationen mit drei neuen Operatoren ermöglicht: pre (Vorbedingung), post (Nachbedingung) und contract_assert (Prüfung des Assertions). Der Operator „pre“ definiert die Vorbedingungen, die vor dem Aufruf erfüllt sein müssen (Eingabedatenprüfung); „post“ sind die Bedingungen, die nach der Ausführung eingehalten werden müssen (Ausgabedatenanforderungen); contract_assert sind die Bedingungen, unter denen Ausnahmen auftreten können. Diese Funktion wird in GCC 16 verfügbar sein.
    • Der Operator „template for“ dient zum Durchlaufen von Elementen, wie Parameterpaketen, die tuple-ähnliche Objekte und Reflexionsergebnisse (Meta-Objekte) in einer traditionellen Schleifenstil zur Compile-Zeit behandeln. Bei der Durchführung von „template for“ wird der Schleifeninhalt für jedes Element entfaltet, und jede Iteration wird in einem separaten Geltungsbereich verarbeitet, in dem das Element der Sequenz, über die die Schleife iteriert, für jede Iteration konstant ist und in constexpr-Ausdrücken verwendet werden kann. Im Kontext der Reflexion kann „template for“ verwendet werden, um Eigenschaften von Klassen oder Enums zu durchlaufen.
    • Die Bibliothek std::simd dient der Parallelisierung von Operationen auf Daten mithilfe von SIMD-Befehlssätzen wie AVX-512 und NEON unter Verwendung des standardisierten Typsystems von C++.
    • Die Bibliotheken std::inplace_vector, std::optional<T&>, std::copyable_function, std::function_ref, std::indirect, std::polymorphic und std::owner_equal.
  • Es wurden Fähigkeiten implementiert, die mit dem Standard C++23 zusammenhängen, wie deutlich Verwaltung der Lebensdauer von Objekten und Unterstützung Angaben zur Zeichencodierung diagnostischer Nachrichten.
  • Erweiterte Unterstützung für den Standard C23 (opennet.ru), zum Beispiel wurde die Möglichkeit implementiert, das Attribut „counted_by“ zur Überprüfung der korrekten Verwendung von Zeigern zu nutzen.
  • Fortsetzung der Implementierung der Standards OpenMP 5.0, 5.1, 5.2 und 6.0 (Open Multi-Processing), die API und Methoden zur Anwendung von paralleler Programmierung auf Multi-Core- und hybriden (CPU+GPU/DSP) Systemen mit gemeinsamem Speicher und Vektorisierungsblöcken (SIMD) definieren. Verbessert Implementierung der Spezifikationen für parallele Programmierung OpenACC 3.0, 3.3 und 3.4, die Mittel für das Offloading von Operationen auf GPUs und spezialisierte Prozessoren wie NVIDIA PTX definieren.
  • Im Backend für die Architektur x86 wurde die Unterstützung für AMD-Prozessoren auf Basis der Mikroarchitektur Zen6 (-march=znver6) sowie für die Prozessoren Intel Wildcat Lake (-march=wildcatlake) und Nova Lake (-march=novalake) hinzugefügt.
  • Im Backend der Codegenerierung für AMD Radeon GPUs (GCN) wurde die Unterstützung für die AMD Instinct MI300-Beschleuniger (gfx942) implementiert.
  • Für die Architekturen RISC-V, ARM, S/390 und LoongArch wurde die Unterstützung des Typs „_BitInt (N)“ zur Definition von Ganzzahlen mit einer bestimmten Bitanzahl umgesetzt.

Quelle: linux.org.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster