J'ai une question concernant llvm, clang et gcc sous OS X.
Quelle est la différence entre les llvm-gcc 4.2, llvm 2.0 et clang? Je sais qu'ils s'appuient tous sur llvm, mais en quoi sont-ils différents?
Outre une compilation plus rapide, quel est l'avantage de llvm par rapport à gcc?
Réponses:
LLVM était à l'origine synonyme de «machine virtuelle de bas niveau», bien qu'il ne se présente plus qu'à lui-même car il est devenu autre chose qu'une machine virtuelle traditionnelle. C'est un ensemble de bibliothèques et d'outils, ainsi qu'une représentation intermédiaire standardisée, qui peuvent être utilisés pour aider à construire des compilateurs et des compilateurs juste à temps. Il ne peut pas compiler autre chose que sa propre représentation intermédiaire; il a besoin d'une interface spécifique au langage pour ce faire. Si les gens se réfèrent simplement à LLVM, ils ne parlent probablement que de la bibliothèque et des outils de bas niveau. Certaines personnes peuvent appeler à tort Clang ou llvm-gcc «LLVM», ce qui peut prêter à confusion.
llvm-gcc est une version modifiée de GCC, qui utilise LLVM comme backend au lieu de celui de GCC. Il est désormais obsolète, au profit de DragonEgg, qui utilise le nouveau système de plugins de GCC pour faire la même chose sans forcer GCC.
Clang est un tout nouveau compilateur C / C ++ / Objective-C, qui utilise son propre frontend, et LLVM comme backend. Les avantages qu'il offre sont de meilleurs messages d'erreur, un temps de compilation plus rapide et un moyen plus facile pour d'autres outils de se connecter au processus de compilation (comme le débogueur LLDB et l'analyseur statique Clang ). Il est également raisonnablement modulaire et peut donc être utilisé comme bibliothèque pour d'autres logiciels qui doivent analyser du code C, C ++ ou Objective-C.
Chacune de ces approches (GCC simple, GCC + LLVM et Clang) a ses avantages et ses inconvénients. Les derniers ensembles de tests que j'ai vus ont montré que GCC produisait un code légèrement plus rapide dans la plupart des cas de test (bien que LLVM ait eu un léger avantage dans quelques-uns), tandis que LLVM et Clang donnaient des temps de compilation nettement meilleurs. GCC et les combos GCC / LLVM ont l'avantage que beaucoup plus de code a été testé et fonctionne sur la saveur GCC de C; il existe des extensions spécifiques au compilateur que seul GCC possède, et certains endroits où la norme permet à l'implémentation de varier mais le code dépend d'une implémentation particulière. Il est beaucoup plus probable que si vous obtenez une grande quantité de code C hérité, cela fonctionnera dans GCC que cela fonctionnera dans Clang, bien que cela s'améliore avec le temps.
la source
Il y a 2 choses différentes ici.
LLVM est un compilateur backend destiné à construire des compilateurs dessus. Il traite des optimisations et de la production de code adapté à l'architecture cible.
CLang est un frontal qui analyse le code C, C ++ et Objective C et le traduit en une représentation adaptée à LLVM.
llvm gcc était une version initiale d'un compilateur C ++ basé sur llvm basé sur gcc 4.2, qui est maintenant obsolète car CLang peut analyser tout ce qu'il pouvait analyser, et plus encore.
Enfin, la principale différence entre CLang et gcc ne réside pas dans le code produit mais dans l'approche. Bien que gcc soit monolithique, CLang a été construit comme une suite de bibliothèques. Cette conception modulaire offre de grandes opportunités de réutilisation pour les IDE ou les outils de complétion par exemple.
Pour le moment, le code produit par gcc 4.6 est généralement un peu plus rapide, mais CLang comble l'écart.
la source
llvm-gcc-4.2 utilise l'interface GCC pour analyser votre code, puis génère la sortie compilée en utilisant LLVM.
Le «compilateur llvm 2.0» utilise le frontal clang pour analyser votre code et génère la sortie compilée à l'aide de LLVM. "clang" est en fait juste le nom de ce front-end, mais il est souvent utilisé avec désinvolture comme nom pour le compilateur dans son ensemble.
la source