Articles précédents : Logiciel
- [5] OpenArena 0.8.1 fête Halloween !
- [14] pyLSM, un module python pour microscope LSM 510
- [61] Sortie de Theora 1.0
- [27] DotClear 2.1, le blog qui monte, qui monte...
- [25] Performous 0.3.0 - Nouvelle version du karaoké libre
- [3] Publication de la version 1.4 de la solution ERP Neogia
- [94] Android désormais disponible et libre
- [18] TeXmacs version 1.0.7
- [41] Dillo 2.0 : Le Web en toute légèreté
- [18] Sortie de Blender 2.48
Liens connexes
- Le site de LLVM (625 clics)
- L'annonce de la version 2.2 sur linuxfr (358 clics)
- Compte rendu des nouveautés de la version 2.4 (141 clics)
- LLVM sur Wikipédia (331 clics)
- Les présentations et vidéos de la rencontre annuelle des développeurs LLVM (132 clics)
Dépêche modérée par
Dépêche éditée par
Logiciel : LLVM 2.4 : le compilateur qui fait plus
Posté par Gilles G. (). Modéré le 12 novembre 2008.LLVM est l'acronyme de Low Level Virtual Machine, mais c'est aussi :
- un compilateur, avec des interfaces pour C, C++ au travers du projet CLang et du port des analyseurs de code C, C++ de GCC. D'autres langages sont également pris en charge.
- un framework de compilateur qui permet d'ajouter simplement des nouveaux langages ou des nouvelles architectures matérielles.
- un générateur de code embarquable pour la compilation à la volée (JIT).
- une stratégie de compilation conçue pour autoriser des optimisations pendant toute la durée de vie d'un programme, c'est à dire à la compilation, pendant l'édition de lien, pendant l'exécution, et par profilage après l'exécution.
- un jeu d'instruction virtuel, la représentation intermédiaire (IR). Celle-ci est accessible sous forme textuelle (c'est l'assembleur LLVM) ou binaire (c'est le bytecode LLVM). C'est cette représentation intermédiaire qui permet les optimisations.
LLVM est le seul concurrent sérieux et libre de GCC GNU Compiler Collection. Il se distingue par sa conception très modulaire et sa simplicité d'utilisation. Cela se reflète dans son API et sa documentation abondante. Il existe même un tutoriel décrivant l'implémentation d'un petit langage en utilisant LLVM !
Évidemment, LLVM propose beaucoup moins de langages et d'architectures que GCC, mais il rattrape son retard et est déjà une alternative tout à fait valable à GCC en utilisant LLVM-GCC.
On peut essayer LLVM sans trop d'effort en le téléchargeant avec l'interface llvm-gcc. Vous pourrez ainsi compiler vos programmes favoris en utilisant la commande llvm-gcc de la même façon que vous utilisez gcc.
Il convient également de citer 2 projets annexes à LLVM, et qui évoluent avec celui-ci :
- CLang est un projet dont le but est de fournir des interfaces C, C++ et Objective C pour LLVM qui soient de meilleure qualité que ce qui existe actuellement (les parseurs de GCC).
- VMKit est une implémentation de la JVM et de la CLI. Il transforme le bytecode java et MSIL en représentation intermédiaire LLVM puis effectue les optimisations fournies par LLVM.
Le site de LLVM (625 clics)
L'annonce de la version 2.2 sur linuxfr (358 clics)
Compte rendu des nouveautés de la version 2.4 (141 clics)
LLVM sur Wikipédia (331 clics)
Les présentations et vidéos de la rencontre annuelle des développeurs LLVM (132 clics)
> Lire les commentaires (29 commentaires, moyenne: 3,4).
ref
Lien wikipedia CLI pas bon, le bon lien :
http://fr.wikipedia.org/wiki/Common_Language_Infrastructure
-
[^]Re: ref
Posté par TImaniac (Jabber id, page perso, ) le 12/11/2008 à 11:00. (lien). Évalué à 2.Le lien vers VMKit n'est pas bon non plus, le bon lien est :
http://vmkit.llvm.org/
The CC Wars
J'aime bien le "LLVM est le seul concurrent sérieux et libre de GCC" alors deux jours auparavant, un article concernant PCC déclarait "Beaucoup voient en lui une alternative viable à GCC qu'il pourra à terme remplacer." On dirait comme une revanche de cet article sur le précédent.
Personnellement, je n'utilise que GCC. En lisant l'article sur PCC (http://linuxfr.org/2008/11/10/24664.html), je n'ai même pas bien compris en quoi il pouvait rivaliser avec le compilateur GNU (exécution plus lente, moins d'architecture, moins d'optimisation...).
LLVM me parait déjà plus intéressant. Le modulaire, souvent, c'est bien et j'ai bien envie de gouter cette compilation à la volée pour C.
Sans aller jusqu'à chercher forcément à détrôner le "Grand Compilateur C", je trouve intéressant qu'il existe d'autres projets viables. C'est l'un des avantages du Libre : avoir le choix. Je ne pense pas remplacer mon gcc mais pourquoi pas tester LLVM par exemple.
Existe-t-il des comparatifs ou bench de ces compilo ?
-
[^]Re: The CC Wars
Posté par Steph () le 12/11/2008 à 11:17. (lien). Évalué à 5.LLVM est si je ne m'abuse déjà utilisé dans la compilation de "shaders" pour les cartes graphiques 3D, par le projet Gallium3D.
Je ne connais pas d'utilisation de GCC dans ce contexte.
Bref ça ouvre d'autres possibilités qui n'ont pas encore été prises en compte par le projet GCC, est c'est trés intéressant.
-
[^]Re: The CC Wars
Posté par Gilles G. () le 12/11/2008 à 11:21. (lien). Évalué à 4.Comme signalé dans l'article, lorsqu'on est habitué à GCC, le plus simple est d'essayer llvm-gcc. Ainsi on a le même fonctionnement qu'avec GCC en profitant des optimisations de LLVM.
Pour ce qui est des benchmarks, il y a ça mais c'est assez vieux:
http://lucille.atso-net.jp/blog/?p=430-
[^]Re: The CC Wars
Posté par ribwund () le 12/11/2008 à 11:35. (lien). Évalué à 2.C'est pas très complet, il faudrait avoir un run de SPEC (en général c'est facile de sortir un unique benchmark sur lequel ton compilo s'en sort bien, sur l'ensemble d'une suite de bench c'est déjà plus dur).
-
[^]Re: The CC Wars
Posté par patrick_g (page perso, ) le 12/11/2008 à 12:11. (lien). Évalué à 2.Ici une comparaison qui a l'air assez sérieuse : http://vmakarov.fedorapeople.org/spec/llvmgcc.html
-
[^]Re: The CC Wars
Posté par ribwund () le 12/11/2008 à 12:16. (lien). Évalué à 3.Pour info, pour les scores de SPEC2k, plus haut c'est mieux (ie, gcc gagne).
-
[^]Re: The CC Wars
Posté par patrick_g (page perso, ) le 12/11/2008 à 12:21. (lien). Évalué à 2.Oui mais LLVM compile plus vite et les scores de performances qu'il obtient ne sont pas loin de GCC (sauf sur le test 176.gcc ou il se crashe ce qui oblige à compiler en -O0).
Moi je dis pas mal du tout.-
[^]Re: The CC Wars
Posté par ribwund () le 12/11/2008 à 12:28. (lien). Évalué à 4.J'ai pas dit que c'était mal :)
C'était juste les infos pour pouvoir interpréter les graphes. Mais 5% c'est quand même beaucoup dans le monde des compilos. Sinon pour les temps de compil, la différence doit être encore plus élevé avec le frontend clang (qui est notamment fait pour pouvoir faire de l'analyse semantique à la volée pour montrer les erreurs dans un IDE, il est donc très rapide).-
[^]Re: The CC Wars
Posté par reno () le 12/11/2008 à 14:22. (lien). Évalué à 3.Pour les compilos peut-être, mais en final ce sont les utilisateur qui choisissent: j'ai bossé sur des projets qui mettaient 3 heures à compiler (vive le C++) et si j'avais eu la possibilité d'avoir 30% de temps de compilations en moins pour 5% de perte de perf, j'aurais signé sans problème!
-
[^]Re: The CC Wars
Posté par ribwund () le 12/11/2008 à 15:05. (lien). Évalué à 2.Il faut dire que pour moi les utilisateurs c'est dans l'embarqué et là ils sont prêt à tout pour gagner 5% même si ça prend des heures (vu les gains en espace mémoire et en autonomie de batterie).
-
[^]Re: The CC Wars
Posté par djano () le 12/11/2008 à 16:24. (lien). Évalué à 4.Pourquoi ne pas utiliser au mieux les forces de ces compilateurs?
A priori, si ton projet le supporte, tu pourrais utiliser LLVM pour développer (cycle code / compile / éxécution rapide), et utiliser GCC pour générer les binaires pour les équipes de test et pour générer l'exécutable final?-
[^]Re: The CC Wars
-
-
-
-
-
-
-
-
-
[^]Re: The CC Wars
Posté par Ontologia (page perso, ) le 12/11/2008 à 11:43. (lien). Évalué à 4.Il y a un détail qui potentiellement casse tout : sous Mac l'option -fno-strict-aliasing n'est pas activée par défaut en -O3 alors qu'elle l'est sous Linux.
Cette option a de grosse implication niveau perf, mais si elle impose de faire attention à ce que l'on met dans son code.
Si LLVM l'implémente de son côté, dans sa partie à lui, faut pas s'étonner de tels différences de perfs.
Mettre 35% à GCC 4.2, sur un exemple précis, en utilisant les capacités spécifiques du Core Duo, ok, mais en général, j'y crois peu.
Bref, il faudrait faire le test sous linux...
-
-
[^]Re: The CC Wars
Posté par CrEv (page perso, ) le 12/11/2008 à 12:00. (lien). Évalué à 2.> un article concernant PCC déclarait "Beaucoup voient en lui une alternative viable à GCC qu'il pourra à terme remplacer."
C'est surtout que PCC est limité au C alors que LLVM et GCC ont une architecture beaucoup plus modulaire et ont pour but de compiler beaucoup plus de langages.
Il existe par exemple SmalltalkKit permettant d'utiliser le JIT de LLVM pour en faire un langage dynamique compatible avec Objective-C (enfin si j'ai bien tout compris ;))
PCC de ce côté là n'est pas du tout un concurrent de LLVM, mais il peut l'être (comme de GCC) sur la partie C.-
[^]Re: The CC Wars
Posté par ErrTu () le 12/11/2008 à 13:54. (lien). Évalué à 3.C'est surtout que PCC est limité au C alors que LLVM et GCC ont une architecture beaucoup plus modulaire et ont pour but de compiler beaucoup plus de langages.
C'est faux. PCC est très modulaire, ce qui lui permet de supporter "facilement" de nouveaux langages et de nouvelles architectures. D'ailleurs PCC est capable de compiler du fortran 77.-
[^]Re: The CC Wars
Posté par CrEv (page perso, ) le 12/11/2008 à 15:07. (lien). Évalué à 2.ok, je ne savais pas.
Mais pourtant le site de PCC [http://pcc.ludd.ltu.se/] indique que le but est de créer un compilateur C99
Donc la question suivante, à part fortran 77 (qui est fourni avec PCC, donc un peu une proof of concept) il existe d'autres langages supportés ou c'est juste pour montrer que c'est possible ?-
[^]Re: The CC Wars
Posté par ErrTu () le 12/11/2008 à 18:18. (lien). Évalué à 4."Proof of concept" est probablement l'expression appropriée pour l'implémentation de fortran 77 dans PCC. Il n'y a pas d'autre langages supportés car personne n'en a suffisamment besoin pour mettre les mains dans le cambouis... ce qui n'est pas le cas pour le C99
Au niveau de la modularité, si on veut porter PCC vers une nouvelle architecture, on peut le faire en environ 5 000 lignes de codes. Chaque tâche de la compilation a bien été séparée de sorte que l'on puisse facilement échanger le backend (la partie qui produit le code machine) et le frontend (la partie qui analyse et traite la syntaxe du langage). Enfin bon ce disgn n'est pas nouveau puisqu'il date d'il y a 30 ans, pour en savoir plus : la présentation de l'architecture de PCC au NYCBSDCon 2008 : http://www.nycbsdcon.org/2008/files/magnusson_pcc.pdf
Bien évidement ce petit compilateur n'a pas du tout pour but de concurrencer LLVM car il ne répond pas au même besoin.
-
-
[^]Re: The CC Wars
Posté par abramov_MS () le 12/11/2008 à 15:08. (lien). Évalué à 5.D'ailleurs PCC est capable de compiler du fortran 77.
Sachant qu'il y a 3 generations de fortran derriere cela laisse reveur avec des changement fondamentaux surtout par rapport au 77 qui est vraiment mais vraiment obsolete. Programmation a la grand pere on va dire gentiment.
GCC supporte quand a lui les normes 90 et son evolution 95, la norme 2003 commence a etre bien supporte, elle aussi un changement majeur qui apporte la compatibilite C et la programmation objet, et un debut d'implementation des nouveautes de la futur norme 2008.
http://gcc.gnu.org/wiki/GFortran-
[^]Re: The CC Wars
Posté par lasher () le 12/11/2008 à 23:49. (lien). Évalué à 1.Sachant qu'il y a 3 generations de fortran derriere cela laisse reveur avec des changement fondamentaux surtout par rapport au 77 qui est vraiment mais vraiment obsolete.
Euh. Obsolète ? J'irai le dire à certains gros industriels qui produisent encore aujourd'hui du code F77 pour de très grosses applis (genre simulation de procédés de fonderie).
Cela dit, oui, implémenter FORTRAN 77 est bien plus simple que ses successeurs.-
[^]Re: The CC Wars
Posté par ribwund () le 13/11/2008 à 00:24. (lien). Évalué à 6.C'est pas parce que c'est utilisé que c'est pas obsolète, y'a encore des gens qui se déplacent en calèche par exemple.
-
[^]Re: The CC Wars
-
-
[^]Re: The CC Wars
Posté par abramov_MS () le 13/11/2008 à 09:45. (lien). Évalué à 3.Comme dit en dessous c'est pas parceque c'est utilise que c'est pas obsolete de plus la norme 90 indique bien qu'un programme 77 doit conpiler dessus et donc, si la norme a ete respecte mais vu que l'on parle de portabilite compilateur le probleme est quasiment le meme, le programme compilera avec un compilateur 90. L'avantage c'est que cela permet de moderniser au fur et a mesure le programme.
Mais pour en revenir a ton point je le sais pertinnement et le pire c'est que tu retrouves probablement des partie en fortran 66 (ie fortran 4) et c'est ca qui empeche probablement le passage a un compilo 90 sans compter que debugger des common c'est le bohneur integral...
-
-
-
-
-
[^]Re: The CC Wars
Posté par Mathieu Stumpf (Jabber id, page perso, ) le 12/11/2008 à 12:02. (lien). Évalué à 4.LLVM est le seul concurrent sérieux au Gnu Collection Compiler, le Portable C Compiler n'étant, pour l'instant, qu'un compilateur C.
-
[^]Re: The CC Wars
Posté par patrick_g (page perso, ) le 12/11/2008 à 12:13. (lien). Évalué à 1.En plus, vu le bench de Makarov dont je donne l'url plus haut, les perfs de LLVM semblent vraiment bonnes.
-
-
[^]Re: The CC Wars
Posté par tankey () le 12/11/2008 à 13:00. (lien). Évalué à 2.Plp Gedsismik
CompBench est un benchmarker de compilation (pas exactement de compilateurs) selon des scénarios. Mais il intègre déjà TCC en plus de GCC (et il est peut être question de voir la branche MELT de GCC ?). En tout cas, il est probable que si des utilisateurs le demande, le developpeur intègre PCC et LLVM.
http://compbench.sourceforge.net/cgi-bin/index.cgi
ps : le site n' est pas remis à jour, mais le projet continue d' avancer : aux dernière nouvelles compbench a subi un énorme remaniement, et on aura peut être même une nouvelle interface en qt4)
Cordialement
Informations
Je viens de lire cet article sur ce beau projet que je ne connaisssait absolument pas et je me pose une qestion : Pourrait-on se servir de LLVM afin de créer un émulateur pour un processeur donné ?
Par exemple, je voudrais interpréter du code ARM sur un PC x86 sous linux, est-ce que LLVM peut m'aider à créer l'interpréteur de code ARM avec des fonctionnalités de JIT ou alors je n'ai rien compris ?
Merci d'avance pour les réponses.
-
[^]Re: Informations
Posté par galactikboulay () le 13/11/2008 à 13:39. (lien). Évalué à 6.L'idée serait de traduire le code ARM en bytecode LLVM, sachant que LLVM est capable d'appliquer des optimisations performantes sur ce bytecode. Quelqu'un s'était déjà penché sur la question pendant un Google SoC, ça a donné LLVM/QEMU (http://code.google.com/p/llvm-qemu/). Le but était de remplacer "dyngen" (*). Par contre je ne sais pas ce que ça vaut et le projet n'a plus l'air très vivant (Au niveau de QEMU ils sont partis sur un backend appelé TCG pour Tiny Code Generator en remplacement de "dyngen").
(*) Dyngen était considéré comme un "hack", et avait tendance à ne pas fonctionner sur les GCC >= 4.



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.