Menü
Developer

LLVM: Google kompiliert Chrome unter Linux jetzt mit Clang

Da viele Chrome-Entwickler Clang der guten Diagnosewerkzeuge wegen unter Linux verwenden, übersetzt Google die Linux-Version von Chrome mittlerweile mit Clang und nicht mehr mit dem GCC-Standard-Compiler.

Von
vorlesen Drucken Kommentare lesen 40 Beiträge
LLVM: Google kompiliert Chrome unter Linux jetzt mit Clang

Google nutzt Clang für die Linux-Version von Chrome: Der Wechsel von GCC zum Clang-Compiler der LLVM-Compiler-Infrastruktur geht aus einem jetzt veröffentlichten Blog-Eintrag hervor. Google begründet den Wechsel unter anderem mit der Tatsache, dass Google-intern bereits viele Chrome-Entwickler mit Clang unter Linux arbeiteten. Diese schätzten die gute Diagnosewerkzeuge, etwa zum Aufspüren von Fehlern beim Kompilieren. Da das Team zudem ein eigenes Clang-Plug-in zum Überprüfen des Programmierstils pflege, verringere der Wechsel von GCC zu Clang als Standard-Compiler Einstiegsbarrieren für Neueinsteiger.

Als zweiten wichtigen Grund führt Google an, dass man bestrebt sei, in Chromium möglichst neue C++-Features zu nutzen, was eine moderne Toolchain erfordere. Bei Chrome unter Android und Chrome OS wolle man allerdings weiterhin seine eigene aktuelle Version 4.8 (gefolgt von 4.9) des GCC-Compilers verwenden, eine spezielle Portierung, die ohnehin nicht dem Standard-Compiler der Systeme entspreche. Das unter OS X und iOS verwendete Clang in Xcode schien den Google-Entwicklern ebenso wenig aktuell genug wie Microsofts Visual Studio 2013. Für gewöhnliche Linux-Distributionen sei der Wechsel zu Clang hingegen der am einfachsten zu realisierende Weg zu aktuellen C++-Features gewesen.

Der C++-Standard habe sich über Jahre kaum verändert, so die Google-Entwickler, erst C++ 11 sei das erste echte Update der Sprache C++ seit dem C++-Standard von 1998. Mittlerweile werde der Sprachstandard wieder im Dreijahresrhythmus aktualisiert – aktuell ist C++14. Die nächste große Hauptiteration werde vermutlich 2017 abgeschlossen sein. Diese sei aus Sicht von Google eine recht dramatische Situation, die sich durchaus auf die Art und Weise des Bauens und Verbreitens von C++-Programmen auswirke. Laut Google habe es drei Jahre gedauert, um C++11 in Chromium verwenden können zu können, mit C++14 werde es hoffentlich schneller gehen.

Dabei gehe es um zwei verschiedene Aspekte von C++11, neue Sprach-Features und neue Bibliothekenfunktionen. Die neuen Features erforderten lediglich einen modernen Compiler auf der Build-Maschine zum Zeitpunkt der Übersetzung. Die neuen Library-Funktionen hingegen bräuchten eine aktualisierte Standardbibliothek zur Laufzeit auf der Maschine des Nutzers. Dabei sei es einfacher, wenn man wenige Plattformen unterstützen müsse. Der erste Part sei laut Google konzeptionell relativ einfach zu lösen. Nutzen die Entwickler beispielsweise ein LTS-Release von Ubuntu, kommen sie alle zwei Jahre automatisch in den Genuss eines neuen Compilers. Beschränke man sich auf den Standard-C++-Compiler des Systems, liege man hinsichtlich der Sprach-Feature "nur" zwei Jahre hinter der aktuellen Entwicklung.

Der einfachste Weg, seinen Entwicklern möglichst transparent eine neue Toolchain zur Verfügung zu stellen, bestehe darin, eine Art "Evergreen Compiler" zu pflegen. Genau das habe Google jetzt durch das Verwenden von Clang für Chromium unter Linux erreicht. So einen Compiler können das Team intern pflegen, ohne auf die Pakete der Linux-Distributionen angewiesen zu sein. Laut Google akzeptiere man aber Patches, die ein Kompilieren mit GCCs kleiner oder gleich der Version 4.8 erlauben, etwa für Entwickler, die es bevorzugen, Chromium lokal unter Zuhilfenahme vorkompilierter Binaries zu übersetzen.

Nicht mehr ganz so einfach sei es mit den neuen Funktionen aus der C++-Standardbibliothek, unter anderem weil eine mit Chrome veröffentlichte aktuelle Bibliothek und eine etwaige vorhandene ältere Systembibliothek miteinander in Konflikt stünden und dann möglicherweise auch andere Probleme verursachten. Hinzu komme, dass die jeweils verwendete GCC-Version immer nur zusammen mit der zugehörigen Bibliothek aktualisiert werden könne. Clang dagegen erlaubt anscheinend auch das Verwenden älterer Bibliotheken.

Derzeit arbeitet das Chrome-für-Linux-Team aber noch an einer Lösung für die verschiedenen Plattformen, wie im Detail Chrome die neue Funktionen aus den aktuellen C++-Standardbibliotheken integrieren könne. Diese ließen sich etwa im Bundle mit Chrome verteilen. (Thomas Drilling) / (ane)