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.
Aller plus loin
- Le site de LLVM (24 clics)
- L'annonce de la version 2.2 sur linuxfr (1 clic)
- Compte rendu des nouveautés de la version 2.4 (1 clic)
- LLVM sur Wikipédia (37 clics)
- Les présentations et vidéos de la rencontre annuelle des développeurs LLVM (7 clics)
# ref
Posté par TImaniac (site web personnel) . Évalué à 3.
http://fr.wikipedia.org/wiki/Common_Language_Infrastructure
[^] # Re: ref
Posté par TImaniac (site web personnel) . Évalué à 2.
http://vmkit.llvm.org/
# The CC Wars
Posté par GEDsismik (site web personnel) . Évalué à 9.
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 . Évalué à 5.
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. . Évalué à 4.
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 . Évalué à 2.
[^] # Re: The CC Wars
Posté par patrick_g (site web personnel) . Évalué à 2.
[^] # Re: The CC Wars
Posté par ribwund . Évalué à 3.
[^] # Re: The CC Wars
Posté par patrick_g (site web personnel) . Évalué à 2.
Moi je dis pas mal du tout.
[^] # Re: The CC Wars
Posté par ribwund . Évalué à 4.
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 . Évalué à 3.
[^] # Re: The CC Wars
Posté par ribwund . Évalué à 2.
[^] # Re: The CC Wars
Posté par djano . Évalué à 4.
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
Posté par ribwund . Évalué à 2.
[^] # Re: The CC Wars
Posté par Ontologia (site web personnel) . Évalué à 4.
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...
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: The CC Wars
Posté par CrEv (site web personnel) . Évalué à 2.
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 . Évalué à 3.
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 (site web personnel) . Évalué à 2.
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 . Évalué à 4.
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 . Évalué à 5.
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 . Évalué à 1.
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 . Évalué à 6.
[^] # Re: The CC Wars
Posté par Antoine . Évalué à 6.
[^] # Re: The CC Wars
Posté par abramov_MS . Évalué à 3.
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 psychoslave__ (site web personnel) . Évalué à 4.
[^] # Re: The CC Wars
Posté par patrick_g (site web personnel) . Évalué à 1.
[^] # Re: The CC Wars
Posté par bubar🦥 (Mastodon) . Évalué à 2.
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
Posté par s[e]th & h[o]lth (site web personnel) . Évalué à 3.
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 . Évalué à 6.
(*) Dyngen était considéré comme un "hack", et avait tendance à ne pas fonctionner sur les GCC >= 4.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.