Clang ist ein moderner und modular aufgebauter Compiler. Im Vordergrund steht die geringstmögliche Behinderung der Benutzer (durch möglichst klare Fehlermeldungen und schnelle Kompiliervorgänge), aber auch die Wiederverwendbarkeit seiner Komponenten.
So können Teile von LLVM/Clang für verschiedenste Zwecke, z.B. für Syntaxanalysen, als C++-Parser, als Codegenerator, oder als Teil einer IDE verwendet werden.
Dabei bildet LLVM, was für „Low-Level Virtual Machine“ steht die Grundlage für den Compiler: LLVM ist das „Backend“ und wird vom Clang „Frontend“ genutzt.
Er ist Open Source (BSD-Lizenz) und steht somit in direkter Konkurrenz zum GCC, die Entwicklung wird von Apple gefördert.
Hier ein paar interessante Fakten zu LLVM/Clang aus dem Jahre 2012, vor allem in Bezug auf den Vergleich mit GCC:
Clang 11 Jahre alt, GCC ist 25 Jahre alt geworden. [1], [2]
GCC ist ungefähr 8 mal größer als Clang: [1], [2] Clang besteht aus 0.9 Mio Zeilen Code, GCC aus 7.3 Mio. In Dateien sind das 9,000 gegen 77,000.
Der von Clang produzierte Code ist langsamer als der von GCC Produzierte Code, allerdings um nicht allzu viel. [3]
Clang ist dafür beim kompilieren schneller als GCC. [?]
Mehrere Projekte versuchen die „Monopolstellung“ des GCC zu brechen, oder zumindest anzuzweifeln. Dazu gehören:
Während FreeBSD völlig auf LLVM/Clang umsteigen will, gibt es es bei Debian und Gentoo keine derartigen Pläne - ganz im Gegenteil: GCC soll weiterhin der Standardcompiler bleiben. Allerdings sehen beide Distributionen einen Vorteil darin, einen zusätzlichen starken Compiler zu haben. [5],[7]
Es gibt Anstrengungen den Linux Kernel selbst mit Clang zu bauen [15]. Dies gelang bereits 2010 für einige Subsysteme [16]. Dafür sind Änderungen am Quellcode nötig und die größten Hürden sind vom Linux-Quellcode genutzte Spracherweiterungen des GCC [17].
Der Grund für den Start des Clang-Projektes war die Unwilligkeit der GCC-Entwickler den Compiler zu modularisieren um anderen Programmen den Zugriff auf Teilfunktionen gewähren zu können. [8], [9] Ein Zitat sticht dabei besonders heraus:
One of our main goals for GCC is to prevent any parts of it from being used together with non-free software. Thus, we have deliberately avoided many things that might possibly have the effect of facilitating such usage, ...
Dieser Kommentar wurde von Richard M. Stallman, dem Original- und langzeitigem Hauptautor des GCC verfasst.
Außerdem war die Codebasis derart veraltet und kompliziert, dass es Anfängern fast unmöglich war den Code zu ändern, ohne anderen Code zu gefährden. Das schreckte neue Entwickler ab und ist einer der Hauptgründe für die Popularität von Clang [8].
Clang warb lange Zeit mit seinen überlegenen Diagnostischen Nachrichten [10], allerdings zog GCC mit seinen letzten Releases nach [11]. Meiner Meinung nach sind die Nachrichten von Clang immer noch ein kleines Bisschen überlegen.
Clang und GCC unterstützen beide zu einem Großteil den neuen C++11-Standard. [12], [13] Damit sind beide Compiler der Konkurrenz (Visual Studio) weit voraus. [14]
LLVM ist bereits jetzt ein integraler Bestandteil von generischen Grafiktreibern (llvmpipe [18]). Es wird z.B. in der Gnome-Shell und in Unity [19] genutzt.
Das war's mit den Fakten, ab hier kommen nur noch Meinungen des Autors:
Da ich chronisch am „Shiny new Shit“-Syndrom Leide, würde ich Clang jederzeit bevorzugen. Mir gefällt das Interface, mir gefällt du Modularität, und mir gefällt das Entwicklungsmodell.
Aber ganz unabhängig davon freue ich mich, dass GCC einen Konkurrenten bekommt. Schon viel zu lange konnte dieser Dinosaurier unangefochten auf seinem Platz sitzen, was sich auch in einer gewissen Trägheit bemerkbar gemacht hat. Ich hoffe darauf, dass Konkurrenz das Geschäft belebt, ähnlich wie Mozilla Firefox den Browsermarkt belebt hat nachdem Internet Explorer Jahrelang der Platzhirsch war.
Ich weiß nicht, welcher Compiler in ein paar Jahren als der Dominante aus diesem Duell herauskommen wird (ich habe da so 'ne Hoffnung) aber der Sieger und die Community wird auf jeden Fall von diesem Duell profitiert haben.
[1] http://www.phoronix.com/scan.php?page=news_item&px=MTE1OTg
[2] http://www.phoronix.com/scan.php?page=news_item&px=MTE2MDk
[3] http://www.phoronix.com/scan.php?page=article&item=gcc48_llvm32_svn1
[?]
[4] http://clang.debian.net/
[5] http://www.phoronix.com/scan.php?page=news_item&px=MTE2NDE
[6] http://www.phoronix.com/scan.php?page=news_item&px=MTEwMjI
[7] http://www.phoronix.com/scan.php?page=news_item&px=MTEzODQ
[8] http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Clang-Defending-C-from-Murphy-s-Million-Monkeys
[9] http://gcc.gnu.org/ml/gcc/2005-01/msg00008.html
[10] http://clang.llvm.org/diagnostics.html
[11] http://gcc.gnu.org/wiki/ClangDiagnosticsComparison
[12] http://clang.llvm.org/cxx_status.html
[13] http://gcc.gnu.org/projects/cxx0x.html
[14] http://msdn.microsoft.com/en-us/library/hh567368.aspx
[15] http://www.phoronix.com/scan.php?page=article&item=lfcollab_2012_clang
[16] http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html
[17] http://events.linuxfoundation.org/slides/2011/lfcs/lfcs2011_llvm_lelbach.pdf
[18] http://www.mesa3d.org/llvmpipe.html
[19] http://www.golem.de/news/ubuntu-12-10-quantal-quetzal-verzichtet-auf-unity-2d-1208-93922.html
Hat dir diese Antwort geholfen? Wenn nicht oder wenn du Verbesserungs- bzw. Erweiterungsvorschläge hast, dann schreib das bitte einfach auf die Diskussionsseite.