LLVM signifiait à l'origine "low-level virtual machine" (machine virtuelle de bas niveau), bien qu'il ne représente plus que lui-même, car il s'est développé pour devenir autre chose qu'une machine virtuelle traditionnelle. Il s'agit d'un ensemble de bibliothèques et d'outils, ainsi que d'une représentation intermédiaire standardisée, qui peuvent être utilisés pour aider à construire des compilateurs et des compilateurs juste à temps. Elle ne peut pas compiler elle-même autre chose que sa propre représentation intermédiaire ; elle a besoin d'une interface spécifique au langage pour le faire. Si les gens se réfèrent à LLVM, ils parlent probablement de la bibliothèque de bas niveau et des outils. Certaines personnes peuvent se référer à Clang ou à llvm-gcc de manière incorrecte en tant que "LLVM", ce qui peut entraîner une certaine confusion.
llvm-gcc est une version modifiée de GCC, qui utilise LLVM comme backend au lieu de GCC. Elle est maintenant obsolète, en faveur de DragonEgg, qui utilise le nouveau système de plugins de GCC pour faire la même chose sans forker GCC.
Clang est un tout nouveau compilateur C/C++/Objective-C, qui utilise son propre frontend et LLVM comme backend. Les avantages qu'il apporte sont de meilleurs messages d'erreur, un temps de compilation plus rapide, et un moyen plus facile pour d'autres outils de s'accrocher au processus de compilation (comme l'application Débogueur LLDB y Analyseur statique Clang ). Il est également raisonnablement modulaire et peut donc être utilisé comme bibliothèque pour d'autres logiciels qui ont besoin d'analyser du code C, C++ ou Objective-C.
Chacune de ces approches (GCC simple, GCC + LLVM et Clang) présente des avantages et des inconvénients. Les dernières séries de tests que j'ai vues ont montré que GCC produisait un code légèrement plus rapide dans la plupart des cas (bien que LLVM ait un léger avantage dans quelques cas), tandis que LLVM et Clang donnaient des temps de compilation significativement meilleurs. GCC et les combinaisons GCC/LLVM ont l'avantage que beaucoup plus de code a été testé et fonctionne sur la saveur GCC du C ; il y a certaines extensions spécifiques au compilateur que seul GCC possède, et certains endroits où le standard permet à l'implémentation de varier mais où le code dépend d'une implémentation particulière. Il est beaucoup plus probable, si vous avez une grande quantité de code C hérité, qu'il fonctionne avec GCC qu'avec Clang, bien que cela s'améliore avec le temps.