537 votes

Qu'est-ce que LLVM exactement ?

Je n'arrête pas d'entendre parler de LLVM. C'est dans Perl, puis c'est dans Haskell, puis quelqu'un l'utilise dans un autre langage ? Qu'est-ce que c'est ?

  • Qu'est-ce qui le distingue exactement de GCC (perspectives = sécurité, etc.) ?

52 votes

Il y a un bon chapitre dans un livre qui explique tout joliment ici : www.aosabook.org/en/llvm.html

424voto

LiraNuna Points 21565

LLVM est une bibliothèque qui est utilisée pour construire, optimiser et produire du code machine intermédiaire et/ou binaire.

LLVM peut être utilisé comme un cadre de compilation, où vous fournissez le "front end" (parser et lexer) et le "back end" (code qui convertit la représentation de LLVM en code machine réel).

LLVM peut également agir comme un compilateur JIT - il supporte la génération d'assemblages x86/x86_64 et PPC/PPC64 avec des optimisations rapides du code visant la vitesse de compilation.

Malheureusement désactivé depuis 2013, il y avait la possibilité de jouer avec le code machine de LLVM généré à partir de code C ou C++ au niveau de la Page de démonstration .

44 votes

Si vous voulez jouer avec, regardez cet article étonnant : gnuu.org/2009/09/18/écrire son propre compilateur-jouet

30 votes

Le lien fourni dans la réponse dit "La page de démonstration LLVM est actuellement désactivée".

7 votes

ellcc.org/demo/index.cgi est une autre façon de jouer avec la compilation de C/C++ à travers LLVM vers diverses cibles, y compris le code intermédiaire.

179voto

Peter Teoh Points 1001

Un bon résumé de LLVM est le suivant :

enter image description here

À l'avant, vous avez Perl et de nombreux autres langages de haut niveau. En arrière-plan, vous avez le code natif qui s'exécute directement sur la machine.

Au centre se trouve la représentation de votre code intermédiaire. Si chaque langage de haut niveau peut être représenté dans ce format LLVM IR, alors les outils d'analyse basés sur cette IR peuvent être facilement réutilisés - c'est le raisonnement de base.

87voto

N 1.1 Points 7687

LLVM (qui signifiait autrefois "Low Level Virtual Machine", mais plus maintenant) est une infrastructure de compilation, écrite en C++, qui est conçue pour l'optimisation de la compilation, de la liaison, de l'exécution et de l'inactivité des programmes écrits dans des langages de programmation arbitraires. Initialement implémentée pour C/C++, la conception indépendante du langage (et le succès) de LLVM a depuis donné naissance à une grande variété de frontaux, y compris Objective C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL, et d'autres.

Lisez ceci pour plus d'explications
Consultez également Hirondelle libre

13 votes

Donc ce que les docs essayent de dire ; alors que LLVM est un acronyme pour Machine virtuelle de bas niveau le projet s'appelle simplement LLVM et non les mots en toutes lettres.

2 votes

Auparavant, il y avait l'abréviation ci-dessus, mais elle a été supprimée par la suite. fr.wikipedia.org/wiki/LLVM

2 votes

Pour résumer les commentaires. "The Low Level Virtual Machine (LLVM)" devrait être quelque chose comme "LLVM (qui signifiait "Low Level Virtual Machine" plus tôt dans la vie du projet)".

62voto

Ittrin Points 569

Selon Démarrer avec les bibliothèques de base LLVM livre (c) :

En fait, le nom LLVM peut faire référence à l'un des éléments suivants :

  • Le projet/infrastructure LLVM : Il s'agit d'un parapluie pour plusieurs projets qui, ensemble, forment un compilateur complet : frontends, backends, des optimiseurs, des assembleurs, des linkers, libc++, compiler-rt, et une version de moteur JIT. Le mot " LLVM " a cette signification, par exemple, dans la phrase suivante phrase suivante : "LLVM est composé de plusieurs projets".

  • Un compilateur basé sur LLVM : Il s'agit d'un compilateur construit partiellement ou complètement avec l'infrastructure LLVM. Par exemple, un compilateur peut utiliser LLVM pour le frontend et le backend mais utiliser GCC et la bibliothèque système pour effectuer la liaison finale. LLVM a cette signification dans la phrase suivante, par exemple : "J'ai utilisé LLVM pour compiler des programmes C sur une plateforme MIPS".

  • Bibliothèques LLVM : C'est la partie du code réutilisable de l'infrastructure LLVM. Par exemple, LLVM a cette signification dans la phrase : "Mon projet utilise LLVM pour générer du code par le biais de son cadre de compilation Just-in-Time".

  • Noyau LLVM : Les optimisations qui ont lieu au niveau du langage intermédiaire et des algorithmes de base forment le noyau de LLVM où le projet a commencé. LLVM a cette sens dans la phrase suivante : "LLVM et Clang sont deux projets projets différents".

  • L'IR LLVM : C'est l'intermédiaire du compilateur LLVM intermédiaire du compilateur. LLVM a cette signification lorsqu'il est utilisé dans des phrases telles que "J'ai construit un frontend qui traduit mon propre langage en LLVM".

38voto

redbandit Points 31

LLVM est essentiellement une bibliothèque utilisée pour construire des compilateurs et/ou des logiciels orientés langage. L'idée de base est que, bien que vous ayez gcc, qui est probablement la suite de compilateurs la plus courante, elle n'est pas construite pour être réutilisable, c'est-à-dire qu'il est difficile de prendre des composants de gcc et de les utiliser pour construire votre propre application. LLVM répond bien à ce problème en construisant un ensemble de "technologies de compilateurs et de chaînes d'outils modulaires et réutilisables" que tout le monde peut utiliser pour construire des compilateurs et des logiciels orientés langage.

6 votes

Donc LLVM est la bibliothèque, et Clang est le compilateur ?

13 votes

Clang est le compilateur frontal C/C++ de LLVM. Il convertit le code C en bitcode LLVM, qui est traduit en langage assembleur par un compilateur dorsal.

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