45 votes

Quels sont les plus grands avantages de LLVM ?

Est-ce que quelqu'un a de l'expérience avec LLVM, llvm-gcc, ou Clang?

L'idée derrière llvm me semble très intrigante et je suis intéressé de voir comment cela fonctionne. Je ne veux juste pas perdre beaucoup de temps à essayer les outils s'ils ne sont pas prêts pour la production.

Si vous avez de l'expérience avec ces outils, qu'en pensez-vous? Quelles limitations majeures avez-vous rencontrées? Quels sont les plus grands avantages?

Merci beaucoup!

39voto

Louis Gerbarg Points 33025

Je ne peux pas dire assez de bonnes choses sur LLVM. Il est tellement facile de travailler avec par rapport à d'autres projets de compilateurs que j'ai examinés. Je ne suis pas un spécialiste des compilateurs, mais quand je suis frustré par certaines limitations de LLVM ou de clang, il est généralement assez facile de plonger dedans et de les changer.

Nous (Nate Begeman, moi-même, et quelques autres) avons écrit le backend PPC sans réelle expérience en conception de compilateurs, mais cela semblait assez simple pour que des non-experts puissent s'y attaquer. Nous étions assez familiers avec l'assembleur PPC, mais c'était quand même assez incroyable que nous ayons réussi à faire en sorte que LLVM-gcc produise du code PPC en quelques semaines de notre temps libre. Certainement l'un des Hello World les plus satisfaisants que j'ai jamais compilés.

25voto

Jon Harrop Points 26951

J'ai joué avec LLVM de façon intermittente pendant de nombreux mois maintenant. J'ai écrit deux articles du Journal OCaml couvrant l'utilisation de LLVM à partir du langage de programmation OCaml. C'est particulièrement intéressant car le langage OCaml est idéal pour écrire des compilateurs et dispose d'une multitude d'outils et de bibliothèques puissants et matures pour le parsing, et cetera.

Globalement, mon expérience a été extrêmement positive. LLVM fait ce qu'il promet et est très facile à utiliser. Les performances du code généré sont superbes. L'un des programmes que j'ai écrit était un simple petit compilateur Brainf*ck qui génère quelques-uns des exécutables les plus rapides de tous les compilateurs que j'ai testés (y compris GCC).

Je n'ai que deux reproches à faire à LLVM. Tout d'abord, il utilise abort() chaque fois que quelque chose ne va pas au lieu de lever une exception. Il s'agit d'une décision de conception délibérée de ses auteurs, qui s'efforcent de supprimer toutes les utilisations d'exceptions de LLVM, mais cela rend impossible d'obtenir des traces de pile en OCaml lors du débogage d'un compilateur qui utilise LLVM : votre programme meurt simplement avec une explication textuelle de la part de LLVM mais sans aucune indication de l'endroit où l'erreur s'est produite dans votre code source. Deuxièmement, la bibliothèque compilée de LLVM est monstrueusement grande (20 Mo). Je suppose que cela est dû au gonflement causé par le C++, mais cela rend la compilation extrêmement lente.

ÉDIT : Mon travail sur LLVM a abouti à la création d'une machine virtuelle haute performance, haut niveau, et traitée par un système de gestion des déchets. Téléchargement gratuit ici et consultez les benchmarks correspondants (wow!). @Alex: je vais mettre ce compilateur BF en ligne pour vous dès que possible.

21voto

J'ai eu l'occasion de m'amuser un peu avec LLVM et en travaillant à travers ce tutoriel, j'ai été très excité par son potentiel; l'idée que je puisse l'utiliser pour intégrer facilement un JIT dans une application me rend enthousiaste.

Je n'ai pas assez approfondi pour pouvoir offrir un avis utile sur ses limitations, sa stabilité, ses performances, etc. Je sais que c'est bon sur tous les points mais c'est uniquement basé sur des rumeurs.

2voto

Petri Tuononen Points 1428

Vous avez demandé des outils et je tiens à mentionner qu'il existe un plugin LLVM pour Eclipse CDT (pour Windows, Linux et Mac). Il intègre LLVM de manière optimale à l'IDE et l'utilisateur n'a pas besoin de connaître quoi que ce soit sur LLVM. Appuyer sur le bouton de compilation suffit pour produire des fichiers .bc et des fichiers exécutables (ainsi que des fichiers intermédiaires en arrière-plan invisibles pour l'utilisateur).

La dernière version est disponible via le site officiel de mise à jour d'Eclipse : http://download.eclipse.org/releases/mars

Il est situé sous Langages de programmation et s'intitule "C/C++ LLVM-Family Compiler Build Support".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X