LLVM 2.9 mit besserer C++0x-Unterstützung

Die neue Version der Low-Level Virtual Machine hat wie die anderen im Kosmos der Compiler-Infrastruktur entwickelten Unterprojekte zahlreiche Überarbeitungen im Performancebereich erfahren. Auch werden nun Nvidias GPUs angesprochen.

In Pocket speichern vorlesen Druckansicht 39 Kommentare lesen
Lesezeit: 2 Min.
Von
  • Alexander Neumann

Auf die Veröffentlichungen von GCC 4.6 (GNU Compiler Collection) und Portable C Compiler 1.0 folgt nun die Version 2.9 der Low-Level Virtual Machine (LLVM), einer unter anderem von Apple geförderten Compiler-Infrastruktur, die aus einer Sammlung von Bibliotheken und Tools für optimierende Compiler und Just-in-Time-Codegeneratoren besteht. Laut den Entwicklern ist es mit ihr möglich, Code nahezu in Echtzeit zu kompilieren, ohne plattformspezifischen Code einführen zu müssen.

Der in der Infrastruktur enthalten C/C++-Compiler Clang unterstützt nun offenbar besser den zukünftigen C++0x-Standard (C++ 2011), enthält verbesserte Codegenerierungsfunktionen und ist kompatibler mit dem Linux-Kernel. Das GCC-Plug-in DragonEgg, das LLVM als Backend zur Codegenerierung von durch den GNU-Compiler unterstützten Sprachen nutzt, bietet eine bessere Unterstützung für Fortran und stürzt beim Kompilieren von Java-Code nicht mehr ab.

libc++, eine Implementierung der C++-Standardbibliothek, hat zahlreiche Fehlerbeseitigungen erfahren und wird wie ein anderes Unterprojekt, Compiler-rt, nun unter einer dualen Lizenz angeboten. So lässt sich neben der University of Illinios Open Source License (UIUC) nun auch die MIT-Lizenz nutzen. Die Bibliothek soll bevorzugt mit Clang zusammenarbeiten, aber auch mit anderen Compilern funktionieren und den neuen C++-Standard unterstützen. Ebenfalls stabiler soll sich jetzt der modulare Low Level Debugger (LLDB) verhalten, der wie lib++ noch recht neu ist.

Bei LLVM selbst gibt es mit der neuen Version ein als experimentell bezeichnetes Backend, das Nvidias Grafikprozessoren bedienen kann. Außerdem unterstützt die Infrastruktur eine typbasierte Zeigeranalyse, womit sich Load/Store-Architekturen verbessern lassen. Der nun in Clang für 32-Bit- und 64-Bit-Architekturen standardmäßig eingerichtete Assembler unterstützt nun verschiedene alternative Constraints. Ansonsten lag der Fokus der Entwicklung auf der Qualität der Debug-Informationen.

Ursprünglich war C++-Code als Hauptbetätigungsfeld für LLVM angedacht, mittlerweile gibt es auch Frontends für Objective-C/C++, Java-Bytecode, Microsofts Common Intermediate Language (CIL), Python und Ruby-Implementierungen. In den Release Notes geben die Entwickler einige Beispiele aus dem Open-Source-Umfeld, bei denen LLVM verwendet wird. (ane)