Entwicklerwerkzeug: LLVM 10.0 landet mit einem Monat Verspätung

Die Compiler-Infrastruktur LLVM 10 kennt neue Architekturen und erweitert die Anbindung an WebAssembly. Clang 10 verarbeitet die in C++20 eingeführten Concepts.

In Pocket speichern vorlesen Druckansicht
Entwicklerwerkzeuge: LLVM 10.0 landet mit einem Monat Verspätung

(Bild: Milos996 (CC BY-SA 4.0))

Lesezeit: 2 Min.
Von
  • Rainald Menge-Sonnentag

Einen Monat nach dem geplanten Veröffentlichungstermin am 25. Februar ist nun Version 10.0.0 der Compiler-Infrastruktur LLVM erschienen. Wie üblich gibt es einige Neuerungen und Anpassungen bei den Zielplattformen. Darüber hinaus hat das Team den Zwischencode erweitert. Der Compiler Clang kennt einige Neuerungen aus dem aktuellen Standard C++20, allen voran die Concepts.

Vom Go-Frontend hatte sich das Team dagegen im Februar endgültig verabschiedet, da es einerseits veraltet war – es stand beim Abschied noch auf der bereits 2015 veröffentlichten Version 1.5 der Programmiersprache – und andererseits mit gut 700.000 Codezeilen viel Platz in der Codebasis von LLVM eingenommen hat.

Die LLVM IR (Intermediate Representation, Zwischencode) bekommt eine neue Instruktion: freeze stoppt das Propagieren von undefinierten Werten und Poison Values. Außerdem erhalten im IR unbenannte Funktionsparameter neuerdings einen automatisch generierten Namen wie i32 %0. Letzteres könnte zu Inkompatibilitäten mit einigen Frontend-Werkzeugen führen, die ein mitgeliefertes Python-Skript weitgehend beheben soll.

Einige Architekturen sind in LLVM 10 neu hinzugekommen, darunter Cortex-A65, Cortex-A65AE, Neoverse E1, Neoverse N1 und IBM z15. Für zahlreiche andere Plattformen bringt LLVM erweiterte Optimierungen mit, darunter ARMv81.-M und RISC-V. Beim Erstellen von WebAssembly-Bytecode kennt LLVM 10 Thread-Local Storage (TLS) und bietet einen verbesserten SIMD-Support (Single Instruction, Multiple Data).

Clang ist auf einige Neuerungen von C++20 vorbereitet, allen voran die im Sprachstandard eingeführten Concepts. Damit der Compiler sie verarbeiten kann, müssen Entwickler ihn mit dem Flag -std=c++2a starten. Das bisher verwendete Flag für den experimentellen Concepts-Support -fconcepts-ts gilt damit als überholt (deprecated).

Eine weitere nennenswerte Neuerung von Clang ist, dass er das Kompilieren standardmäßig im aktuellen Prozess durchführt, statt wie bisher einen separaten Unterprozess dafür zu starten. Wer das alte Verhalten bevorzugt, kann es über -fno-integrated-cc1 aktivieren.

Weitere Details zu der Compiler-Infrastruktur und dem Compiler finden sich in den Release Notes zu LLVM 10.0.0 beziehungsweise in der Ankündigung von Clang 10.0.0. Auf der Download-Seite sind neben dem Source-Code für LLVM und die Unterprojekte Binaries für macOS, Linux, FreeBSD und Windows sowie Dokumentationen zu den einzelnen Projekten zu finden. (rme)