LLVM vs. Clang unter OS X

Lesezeit: 5 Minuten

Benutzeravatar von Dominik
Dominik

Ich habe eine Frage zu llvm, clang und gcc unter OS X.

Was ist der Unterschied zwischen llvm-gcc 4.2, llvm 2.0 und clang? Ich weiß, dass sie alle auf llvm aufbauen, aber wie unterscheiden sie sich?

Abgesehen von der schnelleren Kompilierung, was ist der Vorteil von llvm gegenüber gcc?

  • llvm ist nur ein Backend, es kann keinen eigenständigen llvm-Compiler geben … es gibt nur verschiedene Frontends dafür, wie gcc und clang.

    – Smerlin

    18. April 2011 um 20:46 Uhr

  • @smerlin: “llvm compiler” ist Apples Handelsname für clang + llvm: developer.apple.com/technologies/tools/…

    – Stefan Kanon

    18. April 2011 um 20:50 Uhr

  • Weitere Details hier: stackoverflow.com/a/26724886/1938163

    – Marco A.

    10. November 2014 um 13:18 Uhr

Benutzeravatar von Brian Campbell
Brian Campell

LLVM stand ursprünglich für „Low-Level Virtual Machine“, obwohl es jetzt nur noch für sich selbst steht, da es sich zu etwas anderem als einer traditionellen virtuellen Maschine entwickelt hat. Es ist eine Reihe von Bibliotheken und Tools sowie eine standardisierte Zwischendarstellung, die zum Erstellen von Compilern und Just-in-Time-Compilern verwendet werden kann. Es kann nichts anderes als seine eigene Zwischendarstellung selbst kompilieren; dazu benötigt es ein sprachspezifisches Frontend. Wenn sich Leute nur auf LLVM beziehen, meinen sie wahrscheinlich nur die Low-Level-Bibliothek und -Tools. 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 anstelle des eigenen von GCC als Backend verwendet. Es ist jetzt zugunsten von DragonEgg veraltet, das das neue Plugin-System von GCC verwendet, um dasselbe zu tun, ohne GCC zu forken.

Clang ist ein ganz neuer C/C++/Objective-C-Compiler, der sein eigenes Frontend und LLVM als Backend verwendet. Die Vorteile, die es bietet, sind bessere Fehlermeldungen, schnellere Kompilierzeit und eine einfachere Möglichkeit für andere Tools, sich in den Kompilierungsprozess einzuklinken (wie die LLDB-Debugger und Clang statischer Analysator). Es ist auch ziemlich modular und kann daher als Bibliothek für andere Software verwendet werden, die C-, C++- oder Objective-C-Code analysieren muss.

Jeder dieser Ansätze (einfacher GCC, GCC + LLVM und Clang) hat seine Vor- und Nachteile. Die letzten paar Sätze von Benchmarks, die ich gesehen habe, zeigten, dass GCC in den meisten Testfällen etwas schnelleren Code produzierte (obwohl LLVM in einigen wenigen einen leichten Vorteil hatte), während LLVM und Clang deutlich bessere Kompilierzeiten lieferten. GCC und die GCC/LLVM-Kombinationen haben den Vorteil, dass viel mehr Code getestet wurde und auf der GCC-Variante von C funktioniert; Es gibt einige Compiler-spezifische Erweiterungen, die nur GCC hat, und einige Stellen, an denen der Standard die Implementierung variieren lässt, der Code jedoch von einer bestimmten Implementierung abhängt. Wenn Sie eine große Menge an altem C-Code erhalten, ist es viel wahrscheinlicher, dass er in GCC funktioniert als in Clang, obwohl sich dies im Laufe der Zeit verbessert.

  • Um diese wunderbare Antwort zu ergänzen: clang ist auch eine Reihe von Bibliotheken (namens libclang), die Sie für Dinge wie Codeanalyse, Autovervollständigung, Syntaxhervorhebung usw. verwenden können. Dies ist sehr praktisch für IDEs.

    Benutzer142019

    9. November 2011 um 9:43 Uhr


  • Wenn Sie für MacOS X oder iOS entwickeln, denken Sie daran, dass Clang die Software ist, die Apple verwendet, um ihre gesamte MacOS X- und iOS-Software einschließlich des Betriebssystems zu erstellen, und dass Clang das ist, was Sie automatisch und ohne Aufwand erhalten und was Sie jemals bekommen haben um Hilfe bitten verwendet. Apple hat gcc nach gcc 4.2 nie unterstützt und liefert keine Version von gcc mehr aus.

    – gnasher729

    23. Februar 2014 um 21:00 Uhr

  • @gnasher729 Ja, diese Antwort wurde vor 3 Jahren geschrieben, als Apple noch sowohl llvm-gcc als auch Clang mit llvm-gcc als Standardcompiler auslieferte. Seitdem haben sich die Zeiten geändert.

    – Brian Campell

    24. Februar 2014 um 5:03 Uhr

  • Nur zu Ihrer Information: Einer der Hauptgründe, warum Apple zu Clang gewechselt ist, ist die Lizenz – es erfordert kein Open Source. Im Gegensatz dazu steht GCC unter der GPL v3-Lizenz.

    – Sternchen

    24. Juli um 23:55 Uhr

  • „Obwohl es jetzt nur noch für sich selbst steht, da es sich zu etwas anderem als einer traditionellen virtuellen Maschine entwickelt hat. Es ist eine Reihe von Bibliotheken und Tools sowie eine standardisierte Zwischendarstellung.“ Ich liebe es, wenn das passiert! Macht die Dinge als Benutzer so viel einfacher zu verstehen 🙂 🙂 🙂

    – iono

    29. Juli um 13:21 Uhr

Benutzeravatar von Matthieu M
Matthias M.

Hier gibt es 2 verschiedene Dinge.

LLVM ist ein Backend-Compiler, der Compiler darauf aufbauen soll. Es befasst sich mit Optimierungen und der Erstellung von an die Zielarchitektur angepasstem Code.

CLang ist ein Frontend, das C-, C++- und Objective-C-Code parst und in eine für LLVM geeignete Darstellung übersetzt.

llvm gcc war eine anfängliche Version eines llvm-basierten C++-Compilers basierend auf gcc 4.2, der jetzt veraltet ist, da CLang alles parsen kann, was er parsen kann, und mehr.

Schließlich liegt der Hauptunterschied zwischen CLang und gcc nicht im produzierten Code, sondern in der Herangehensweise. Während gcc monolithisch ist, wurde CLang als Suite von Bibliotheken erstellt. Dieses modulare Design ermöglicht beispielsweise großartige Wiederverwendungsmöglichkeiten für IDE- oder Completion-Tools.

Im Moment ist der von gcc 4.6 erzeugte Code im Allgemeinen etwas schneller, aber CLang schließt die Lücke.

llvm-gcc-4.2 verwendet das GCC-Front-End, um Ihren Code zu parsen, und generiert dann die kompilierte Ausgabe mit LLVM.

Der „llvm-Compiler 2.0“ verwendet das clang-Front-End, um Ihren Code zu parsen, und generiert die kompilierte Ausgabe mit LLVM. “clang” ist eigentlich nur der Name für dieses Frontend, wird aber oft salopp als Name für den Compiler als Ganzes verwendet.

1424120cookie-checkLLVM vs. Clang unter OS X

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy