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.
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.
Zwischencode und Architekturen
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).
Mehr C++20 fĂĽr Clang
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)