Das Compiler-Set LLVM 19 wurde veröffentlicht.

Nach sechs Monaten Entwicklung ist die Version LLVM 19.1.0 des Projekts nun verfĂŒgbar. Diese Version erweitert die Werkzeugpalette (Compiler, Optimierer und Code-Generatoren) und kompiliert Programme in einen intermediĂ€ren RISC-Ă€hnlichen Bytecode fĂŒr virtuelle Instruktionen (eine niedrigstufige virtuelle Maschine mit einem mehrschichtigen Optimierungssystem). Der generierte Pseudocode kann in Maschinencode fĂŒr die jeweilige Zielplattform umgewandelt oder von einem JIT-Compiler verwendet werden, um Maschinensprache direkt wĂ€hrend der ProgrammausfĂŒhrung zu erzeugen. Basierend auf der LLVM-Technologie wird der Compiler Clang entwickelt, der die Programmiersprachen C, C++ und Objective-C unterstĂŒtzt. Mit dieser Version hat das Projekt auf ein neues Versionsnummerierungsschema umgestellt, bei dem die nullte Publikation („N.0“) im Entwicklungsprozess verwendet wird und die erste stabile Version die Nummer „N.1“ erhĂ€lt.

Zu den Verbesserungen in Clang 19 gehören:

  • HinzugefĂŒgte Funktionen, die im C-Standard C23 definiert sind:
    • UnterstĂŒtzung fĂŒr die Nutzung des constexpr-Spezifizierers zur Definition von Objekten;
    • Makros INFINITY, NAN, FLT_NORM_MAX, DBL_NORM_MAX und LDBL_NORM_MAX in float.h;
    • Mechanismus «#embed» zur Integration binĂ€rer Ressourcen;
    • Typ char8_t fĂŒr Zeichenketten und Zeichen in UTF-8.
  • Es wird die vollstĂ€ndige Implementierung aller Möglichkeiten, die im C++17-Standard definiert sind, gewĂ€hrleistet. Der letzte Schritt bestand darin, die UnterstĂŒtzung fĂŒr Elemente zu aktivieren, die ParameterĂŒbereinstimmungen mit kompatiblen Argumenten ermöglichen, die standardmĂ€ĂŸig deaktiviert waren aufgrund von KompatibilitĂ€tsproblemen.
  • Im C++14-Modus ist die UnterstĂŒtzung der Delete-Funktion mit GrĂ¶ĂŸenangabe (sized deallocation) standardmĂ€ĂŸig aktiviert.
  • Funktionen, die mit dem C++20-Standard verbunden sind, wurden hinzugefĂŒgt: eingebaute Funktionen __is_layout_compatible und __is_pointer_interconvertible_base_of; vollstĂ€ndige UnterstĂŒtzung fĂŒr AusdrĂŒcke zum Importieren von Modulen; erste UnterstĂŒtzung fĂŒr die automatische Typbestimmung von Template-Argumenten fĂŒr durch Vorlagen erzeugte Typalias (CTAD fĂŒr Alias Template).
  • Funktionen, die mit dem C++20-Standard verbunden sind, wurden hinzugefĂŒgt: VerlĂ€ngerung der Lebensdauer temporĂ€rer Objekte in Schleifen, die Bereiche durchlaufen; tragbare Annahmen; Lockerung der EinschrĂ€nkungen fĂŒr constexpr und Deaktivierung der Diagnose „-Winvalid-constexpr“; UnterstĂŒtzung von statischen und expliziten Mitgliedsfunktionen von Objekten mit identischen Parameterlisten.
  • Neue Funktionen im Zusammenhang mit dem zukĂŒnftigen Standard C++2c (C++26) hinzugefĂŒgt: Indizierung von Paketparametern in Templates; Syntax ‘= delete(„Grund“)‘; Attribute fĂŒr strukturierte Bindungen; Verbot der Bindung eines zurĂŒckgegebenen glvalue an temporĂ€re Werte; triviale endlose Schleifen ohne undefiniertes Verhalten; Ausgabe eines Fehlers bei der Löschung eines Zeigers auf einen unvollstĂ€ndigen Typ; Anwendung von EinschrĂ€nkungen in den FaltungsausdrĂŒcken („
“).
  • Neue Compiler-Flags hinzugefĂŒgt:
    • „-fsanitize=implicit-bitfield-conversion“ zur ÜberprĂŒfung auf implizite Truncation und VorzeichenĂ€nderungen beim Arbeiten mit Bitfeldern.
    • „-fsanitize=implicit-integer-conversion“ zur ÜberprĂŒfung auf implizite Ganzzahlumwandlungen.
    • „-Wmissing-designated-field-initializers“ zur Identifizierung fehlender Feldinitialisierer.
    • „-fexperimental-modules-reduced-bmi“ zur Aktivierung eines reduzierten BMI (Binary Module Interface) fĂŒr benannte Module in C++20, das die Verwendung von Standardmodulen in C++ ermöglicht.
    • „-fexperimental-late-parse-attribute“ zur Aktivierung des spĂ€ten Parsens von Attributen in spezifischen Kontexten, z. B. des Attributs counted_by.
    • „-fseparate-named-sections“ zur Erstellung separater, einzigartiger Abschnitte fĂŒr globale Symbole in benannten speziellen Abschnitten.
    • «-fms-define-stdc» zur GewĂ€hrleistung der STDC-KompatibilitĂ€t mit MSVC.
    • «-Wc++23-compat» und «-Wc++2c-compat» sind Gruppen von Warnungen, die die Migration auf C++23 und C++26 erleichtern.
    • «-fdisable-block-signature-string» zur Deaktivierung der Generierung von Signaturstrings fĂŒr Blöcke.
    • «-fpointer-tbaa» zur Markierung inkompabilitĂ€rer Zeiger unter Verwendung der Typ-basierenden Aliasanalyse (TBAA).
  • Neue Attribute wurden hinzugefĂŒgt: sized_by, counted_by_or_null, nonblocking, nonallocating, blocking, allocating, sized_by_or_null, amdgpu_max_num_work_groups(x, y, z).
  • Neue integrierte Funktionen wurden hinzugefĂŒgt: __builtin_readsteadycounter, __builtin_popcountg, __builtin_clzg, __builtin_ctzg, __is_bitwise_cloneable.
  • Die Diagnose- und statischen Analysewerkzeuge wurden erweitert, und es wurden neue PrĂŒfungen hinzugefĂŒgt.

Die Hauptneuerungen von LLVM 19:

  • Im Backend fĂŒr die RISC-V-Architektur wurde experimentelle UnterstĂŒtzung fĂŒr die Erweiterungen Zabha (atomare Speicheroperationen), Ssqosid, Ssnpm, Smnpm, Smmpm, Sspm und Supm (Einsatz von Masken fĂŒr Zeiger), Zba, Zbb und Zbs hinzugefĂŒgt. Die UnterstĂŒtzung der Erweiterungen Ztso, Zabha, Zaamo und Zalrsc wurde stabilisiert.
  • Im Backend fĂŒr die AArch64-Architektur wurde UnterstĂŒtzung fĂŒr die Cortex-Prozessoren R82AE, A78AE, A520AE, A720AE, A725, X925, Neoverse-N3, Neoverse-V3 und Neoverse-V3AE hinzugefĂŒgt.
  • Im Backend fĂŒr die ARM-Architektur wurde UnterstĂŒtzung fĂŒr den Prozessor Cortex-R52+ hinzugefĂŒgt.
  • Die Backends fĂŒr die Architekturen X86, LoongArch, WebAssembly, MIPS, PowerPC und AMDGPU wurden verbessert.
  • Die Funktionen des Linkers LLD wurden erweitert. Neue Relokationsarten wurden hinzugefĂŒgt: CREL, GNU_PROPERTY_AARCH64_FEATURE_PAUTH, R_AARCH64_AUTH_ABS64 und R_AARCH64_AUTH_RELATIVE. Ein Parameter „—compress-sections ={none,zlib,zstd}[:level]“ wurde hinzugefĂŒgt, um den Komprimierungsalgorithmus der Abschnitte auszuwĂ€hlen.
  • In der Bibliothek Libc++ wird die Implementierung der Standards C++20, C++23 und C++26 fortgesetzt.
  • Die Anforderungen an die Python-Version fĂŒr den LLVM-Bau wurden von 3.6 auf 3.8 erhöht.

Quelle: opennet.ru

ZuverlĂ€ssiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen đŸ”„ ZuverlĂ€ssiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster