GCC 16

Nach einem Jahr Entwicklung veröffentlicht Veröffentlichung des freien Satzes von Compilern GCC 16.1, die erste bedeutende Veröffentlichung in der neuen Reihe GCC 16.x. Entsprechend der Versionsnummerierung, wurde Version 16.0 im Entwicklungsprozess verwendet, und kurz vor der Veröffentlichung von GCC 16.1 hat sich bereits der Branch GCC 17.0, auf dessen Basis die nÀchste bedeutende Veröffentlichung GCC 17.1 erstellt wird.

Haupt- Änderungen:

  • Der Standardmodus fĂŒr die Programmiersprache C++ wurde auf die Verwendung des Standards C++20 (Dialekt GNU C++20, -std=gnu++20) anstelle des zuvor angebotenen C++17. Die Implementierung von C++20 in der Standardbibliothek wurde als stabil erklĂ€rt.
  • Ein experimentelles Frontend ga68 fĂŒr die Kompilierung von Programmen in der Programmiersprache Algol 68 wurde hinzugefĂŒgt.
  • Die Möglichkeit zur Ausgabe von Diagnosen im HTML-Format wurde hinzugefĂŒgt. Die Informationen zum Programmablauf, die bei der Diagnose im Format ausgegeben werden, wurden erweitert SARIF, basierend auf JSON (die UnterstĂŒtzung fĂŒr „-fdiagnostics-format=json“ wurde eingestellt).
  • Die Optimierungen im Bindungsprozess wurden erweitert (LTO, Link-Time Optimization). Eine neue Option „-flto-toplevel-asm-heuristics“ wurde hinzugefĂŒgt, die Heuristiken zur Verbesserung der Codeoptimierung mit Assembler-EinfĂŒgungen einschließt. Die Technik der spekulativen Devirtualisierung (-fdevirtualize-speculatively) ist nun nicht mehr auf die Transformation virtueller Methoden beschrĂ€nkt und kann bei der Umwandlung in direkte Aufrufe aller indirekten Funktionsaufrufe, z.B. ĂŒber Zeiger, angewendet werden.
  • Die UnterstĂŒtzung fĂŒr die Vektorisierung von Schleifen, bei denen die Anzahl der Iterationen zur Kompilierungszeit unbekannt ist, wurde implementiert. Die Effizienz bei der Verarbeitung vorzeitiger Schleifenabrechnungen (z.B. ĂŒber break) wurde erhöht.
  • Es wurde experimentelle UnterstĂŒtzung hinzugefĂŒgt viele Funktionen kĂŒrzlich genehmigte Standards C++26. Zum Beispiel wurden implementiert:
    • Reflexion (Reflection, „-freflection“), die es ermöglicht, Elemente eines Programms zur Kompilierungszeit zu verfolgen und zu modifizieren. Neue Operatoren „^^ (open-std.org)“ zum Abrufen von Metainformationen ĂŒber grammatische Konstrukte und „[:
:]“ zur DurchfĂŒhrung der Umkehrtransformation wurden hinzugefĂŒgt. FĂŒr die Transformation und Verarbeitung der durch Inspektion erhaltenen Informationen wurde die Bibliothek std::meta angeboten, und Funktionen wie Berechnungen mit Konstanten sind verfĂŒgbar.
    • Vertragliches Programmieren (VertrĂ€ge), mit dem formale Spezifikationen fĂŒr Schnittstellen durch drei neue Operatoren definiert werden können: pre (Vorbedingung), post (Nachbedingung) und contract_assert (ÜberprĂŒfung der Behauptung). Der Operator „pre“ definiert die Vorbedingungen, die vor dem Aufruf erfĂŒllt sein mĂŒssen (EingabedatenĂŒberprĂŒfung); „post“ sind die Bedingungen, die nach der AusfĂŒhrung erfĂŒllt sein 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 parameterisierten Paketen, die tuple-Ă€hnliche Objekte und Reflexionsergebnisse (Meta-Objekte) wĂ€hrend der Kompilierung im Stil einer normalen Schleife Ă€hnelt. Bei der AusfĂŒhrung von „template for“ wird der Rumpf der Schleife fĂŒr jedes Element aufgedeckt, und jede Iteration wird in einem separaten Sichtbereich verarbeitet, in dem das Element der Sequenz, ĂŒber das die Schleife iteriert, fĂŒr jede Iteration eine Konstante ist und an konstanten AusdrĂŒcken (constexpr) beteiligt sein kann. Im Kontext der Reflexion kann „template for“ verwendet werden, um die Eigenschaften von Klassen oder AufzĂ€hlungen zu durchlaufen.
    • Die Bibliothek std::simd zum Parallelisieren der AusfĂŒhrung von Operationen auf Daten mithilfe von SIMD-BefehlssĂ€tzen wie AVX-512 und NEON, unter Verwendung des Standard-C++-Typsystems.
    • Die Bibliotheken std::inplace_vector, std::optional, std::copyable_function, std::function_ref, std::indirect, std::polymorphic und std::owner_equal.
  • Funktionen, die mit dem Standard C++23 in Verbindung stehen, wurden implementiert, wie explizites Management der Lebensdauer von Objekten und Support Angaben zur Zeichencodierung von Diagnosemeldungen.
  • Die UnterstĂŒtzung des Standards C23 (opennet.ru), beispielsweise wurde die Verwendung des Attributs „counted_by“ zur ÜberprĂŒfung der korrekten Verwendung von Zeigern implementiert.
  • Fortgesetzt Implementierung der Standards OpenMP 5.0, 5.1, 5.2 und 6.0 (Open Multi-Processing), die APIs und Methoden zum Parallelprogrammieren auf Mehrkern- und hybriden (CPU+GPU/DSP) Systemen mit gemeinsamem Speicher und Vektorisierungsblöcken (SIMD) definieren. Verbessert Implementierung von Spezifikationen fĂŒr paralleles Programmieren OpenACC 3.0, 3.3 und 3.4, die Mittel zum Offloading von Operationen auf GPUs und spezialisierte Prozessoren wie NVIDIA PTX definieren.
  • Im Backend fĂŒr die x86-Architektur wurde die UnterstĂŒtzung von AMD-Prozessoren basierend auf der Mikroarchitektur Zen6 (-march=znver6), sowie von Intel-Prozessoren Wildcat Lake (-march=wildcatlake) und Nova Lake (-march=novalake) hinzugefĂŒgt.
  • Im Backend der Codegenerierung fĂŒr GPU AMD Radeon (GCN) wurde die UnterstĂŒtzung fĂŒr die Beschleuniger AMD Instinct MI300 (gfx942) implementiert.
  • FĂŒr die Architekturen RISC-V, ARM, S/390 und LoongArch wurde die UnterstĂŒtzung fĂŒr den Typ „_BitInt (N)“ zur Definition von Ganzzahlen mit einer angegebenen Anzahl von Bits implementiert.

Quelle: linux.org.ru

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster