LLVM stand ursprünglich für "Low-Level Virtual Machine", obwohl es jetzt nur für sich selbst steht, da es sich zu etwas anderem als einer herkömmlichen virtuellen Maschine entwickelt hat. Es handelt sich um eine Reihe von Bibliotheken und Tools sowie eine standardisierte Zwischendarstellung, mit deren Hilfe Compiler und Just-in-Time-Compiler erstellt werden können. Es kann nichts anderes als seine eigene Zwischendarstellung selbst zusammenstellen; Dazu benötigt es ein sprachspezifisches Frontend. Wenn sich die Leute nur auf LLVM beziehen, meinen sie wahrscheinlich nur die Bibliothek und die Tools auf niedriger Ebene. Einige Leute bezeichnen Clang oder llvm-gcc möglicherweise fälschlicherweise als "LLVM", was zu Verwirrung führen kann.
llvm-gcc ist eine modifizierte Version von GCC, die LLVM als Backend anstelle von GCC verwendet. Es ist jetzt veraltet, zugunsten von DragonEgg, das das neue Plugin-System von GCC verwendet, um dasselbe zu tun, ohne GCC zu verzweigen.
Clang ist ein völlig neuer C / C ++ / Objective-C-Compiler, der sein eigenes Frontend und LLVM als Backend verwendet. Die Vorteile sind bessere Fehlermeldungen, eine schnellere Kompilierungszeit und eine einfachere Möglichkeit für andere Tools, sich in den Kompilierungsprozess einzubinden (wie den LLDB-Debugger und den statischen Clang-Analysator ). Es ist auch einigermaßen modular aufgebaut und kann daher als Bibliothek für andere Software verwendet werden, die C-, C ++ - oder Objective-C-Code analysieren muss.
Jeder dieser Ansätze (einfaches GCC, GCC + LLVM und Clang) hat seine Vor- und Nachteile. Die letzten Benchmarks, die ich gesehen habe, haben gezeigt, dass GCC in den meisten Testfällen etwas schnelleren Code erzeugt (obwohl LLVM in einigen Fällen einen leichten Vorteil hatte), während LLVM und Clang signifikant bessere Kompilierungszeiten lieferten. GCC- und GCC / LLVM-Kombinationen haben den Vorteil, dass viel mehr Code getestet wurde und mit der GCC-Variante von C arbeitet. Es gibt einige compilerspezifische Erweiterungen, die nur GCC hat, und einige Stellen, an denen der Standard die Implementierung der Implementierung zulässt, der Code jedoch von einer bestimmten Implementierung abhängt. Es ist viel wahrscheinlicher, dass es in GCC funktioniert, wenn Sie eine große Menge alten C-Codes erhalten, als in Clang, obwohl sich dies im Laufe der Zeit verbessert.