Login


 
Newsletter
Werbung

Di, 3. März 2015, 10:59

Software::Entwicklung

LLVM 3.6 freigegeben

Version 3.6 des Compiler-Frameworks LLVM bringt die komplette Compilierung des Linux-Kernels in greifbare Nähe und viele weitere Verbesserungen.

llvm.org

Das LLVM-Team an der University of Illinois in Urbana-Champaign bezeichnet LLVM als eine Compilier-Strategie für effektive Optimierung, einen virtuellen Befehlssatz und eine Compiler-Infrastruktur. Es wird zur Zeit für Forschungen im Bereich von Compilern, Architekturen, Sicherheit und Betriebssysteme verwendet.

LLVM (Low Level Virtual Machine) definiert einen virtuellen Befehlssatz, der an RISC-Maschinen angelehnt ist, aber reichhaltige Typinformation und Datenfluss-Information zur Verfügung stellt. Dies ermöglicht zum einen ausgefeilte Transformationen des Objektcodes, andererseits kann die Information an das ausführbare Programm angehängt werden. Dies erlaubt weitere Transformationen während des Linkens, zur Laufzeit und an der ausführbaren Datei selbst, während das Programm nicht läuft.

LLVM 3.6 erscheint genau sechs Monate nach LLVM 3.5 mit vielen neuen Funktionen und Verbesserungen. Dabei trennte sich das Team von einigen obsoleten Funktionen und führte auch Änderungen durch, die das Verhalten ändern, was aber nur wenige Nutzer treffen dürfte. Der alte Just-in-Time-Compiler wurde jetzt entfernt, da nur noch MCJIT genutzt werden soll. Python wird jetzt in Version 2.7 vorausgesetzt, weil diese Version die beste Kompatibilität mit Python 3.0 bietet.

Die Code-Generierung für MIPS wurde stark verbessert und von vielen Fehlern befreit. Die Binärschnittstelle ist jetzt kompatibel zu der von GCC. Auch für PowerPC wurden zahlreiche Verbesserungen verwirklicht. Wo nötig, kann man mit neuen Kommandozeilenoptionen zwischen den Bibliotheken glibc und uclibc wählen. Neu sind die Bindungen für Googles Programmiersprache Go. Die Bindungen für OCaml wurden aktualisiert und erfordern jetzt OCaml ab 4.00.

Ein bedeutender Schritt ist den Entwicklern auch bei der Compilierung des Linux-Kernels gelungen. Nachdem in LLVM etliche Änderungen vollzogen wurden, um Inline-Assembler kompatibel zu GCC zu machen, sollen jetzt nur noch wenige Kernel-Patches nötig sein. Neben diesen Änderungen gab es zahlreiche kleine Erweiterungen, Korrekturen und interne API-Änderungen. Weitere Informationen enthalten die Anmerkungen zur Veröffentlichung.

Auch das Umfeld von LLVM wächst immer weiter. So wird LLVM auch von der freien OpenCL-Implementation pocl und der Implementation einer Transport-getriggerten Architektur TCE, der LISP-ähnlichen Sprache Likely, dem D-Compiler LDC und dem C#-Compiler LLVMSharp verwendet.

Der mit LLVM kommende C-, C++- und Objective C-Compiler Clang erhielt weiter verbesserte Fehlermeldungen. Zudem werden bessere Korrekturvorschläge gemacht. Das eingebaute Makro __has_attribute und das Symbol __EXCEPTIONS änderten ihr Verhalten. Das Hilfsprogramm clang-format kann jetzt auch Java-Code formatieren.

Die neuen Pragmas #pragma unroll und #pragma nounroll erlauben eine präzise Beeinflussung des Ausrollens von Schleifen. Viele Korrekturen und Anpassungen wurden unter Windows und msvc vorgenommen. Die Standard-Implementation ist nun C11 mit GNU-Erweiterungen. Dafür wurde auch die vorgeschriebene Header-Datei <stdatomic.h> erstellt. Wer Code besitzt, der dem C99-Standard folgt, muss die jetzt Compiler-Option -std=gnu99 verwenden.

Der kommende C++-Standard, der eventuell 2017 erscheinen soll, wird bereits jetzt optional unterstützt. Zwar sind die Neuerungen noch keineswegs endgültig definiert, aber einige der vorgeschlagenen Neuerungen sind in Clang schon verfügbar. In dieser Version kamen Fold-Ausdrücke, Literale für den vorzeichenlosen Zeichentyp, verschachtelte Namensraum-Definitionen, Attribute für Namensräume und Enumeratoren sowie die Auswertung von Konstanten für alle Template-Argumente, die keine Typen sind, hinzu. Die Implementation von OpenMP-Pragmas wurde erweitert, soll aber erst in Clang 3.7 vollständig sein.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung