Compilerinfrastruktur: LLVM 8.0 erscheint mit leichter Verspätung

Die LLVM-Suite bringt im aktuellen Release unter anderem stabile Anbindung für WebAssembly und zahlreiche Neuerungen in den Teilprojekten.

In Pocket speichern vorlesen Druckansicht
Compilerinfrastrukttur:LLVM 8.0 erscheint mit leichter Verspätung
Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag

Die achte Hauptversion von LLVM ist knapp einen Monat nach dem geplanten Termin im halbjährlichen Turnus erschienen. Die Veröffentlichung des 8.0.0-Release umfasst die Unterprojekte, zu denen unter anderem der Compiler clang und der Linker lld sowie zahlreiche Extratools wie der Language Server clangd und der Linter clang-tidy geehören. Wie üblich bringen die einzelnen Projekte zahlreiche Neuerungen mit.

Mit dem Release gilt das Build-Target WebAssembly nicht mehr als experimentell, womit sich die Angabe von LLVM_EXPERIMENTAL_TARGETS_TO_BUILD erübrigt. Das Speculative Load Hardening dient der Schadensminimierung für Spectre V1, wie eine Seite der LLVM-Dokumentation genauer erläutert. Das aktuelle Release führt das Funktionsattribut speculative_load_hardening ein, um anzuzeigen, dass die Vorkehrungsmaßnahmen für den Funktionskörper aktiviert sein müssen.

LLVM unterstützt neuerdings die Hexagon-Architektur/HVX V66 ISA als Build-Target und verzichtet ab sofort auf die Zielarchitektur Nios2. AArch64 bekommt das oben genannte Speculative Load Hardening. Die On Request Compilation (ORC) JIT APIs erlauben nun nebenläufige Kompilierung, womit die bisherigen ORC-Layer-Klassen und APIs als überholt (deprecated) gelten und Legacy als Präfix erhalten, beispielsweise LegacyIRCompileLayer.

Der Compiler Clang erlaubt nun das Anlegen einer Datei für das Remapping von Profildaten. Auf die Weise können Entwickler Projekte konsistent von einer Version in die nächste übertragen, wenn sich die Symbole beispielsweise durch das Umbenennen von Klassen oder Namensräumen geändert haben. Außerdem gibt es neue Optionen zum Initialisieren automatischer Variablen, wobei diese standardmäßig weiterhin nicht initialisiert sind. Die Optionen sollen vor allem den Schaden durch undefiniertes Verhalten reduzieren.

Der Linker lld unterstützt dynamische Libraries für WebAssembly. Da sich Konzept und Format dafür noch in Entwicklung befinden, könnte es jedoch noch zu größeren Änderungen kommen. Der Language Server clangd, der für Editoren und andere Werkzeuge mit LSP-Anbindung (Language Server Protocol) Aufgaben wie Autovervollständigung übernimmt, kann nun die passenden Namespace Qualifier ergänzen, sodass beispielsweise der Editor bei der Eingabe von "vec" den Vorschlag std::vector anzeigt. Das Lint-Tool clang-tidy kennt in Version 8 zahlreiche neue Überprüfungen.

Die genannten sind nur ein kleiner Teil einer umfangreichen Liste neuer Funktionen in den unterschiedlichen Projekten rund um LLVM. Wer tiefer einsteigen möchte, kann sich die Release Notes zu LLVM 8.0.0, Clang 8.0.0, lld 8.0.0, libc++ 8.0.0 und den Extra Clang Tools 8.0.0 anschauen. Auf der Download-Seite sind neben dem Source-Code für LLVM und die Unterprojekte Binaries für macOS, FreeBSD und Windows sowie Dokumentationen zu den einzelnen Projekten zu finden. Binaries für Linux fehlten beim Schreiben dieser Meldung noch, sollten aber erfahrungsgemäß in Kürze ebenfalls erhältlich sein.

(rme)