Low Level Virtual Machine
Un article de Wikipédia, l'encyclopédie libre.
Cet article fait partie de la série langages de programmation |
Langages à objets |
C++ - C# - D Eiffel - Groovy - Java Lisaac - Python - Ruby Simula - Smalltalk |
Langages impératifs |
APL - ASP - Assembleur BASIC - C - COBOL - Natural Forth - Fortran - Limbo - Logo Pascal - Perl - PHP - TCL Visual Basic - WLangage |
Langages fonctionnels |
Haskell - ML/OCaml Lisp/Common Lisp Scheme - XSLT |
Langages déclaratifs |
Clips - Prolog |
Langages concurrents |
Ada 95 - Erlang |
Voir aussi |
Conception - Codage Tests - Optimisations |
Low Level Virtual Machine | |
---|---|
Développeur | LLVM Developer Group |
Dernière version | 2.2 (le 11 février 2008) |
Environnement | Multiplate-forme |
Langue | Anglais |
Type | Compilateur |
Licence | University of Illinois Open Source License |
Site web | llvm.org |
Low Level Virtual Machine (en français : machine virtuelle de bas niveau), plus connu sous l'abréviation LLVM, est une infrastructure de compilateur conçue pour optimiser la compilation, l'édition de liens, l'exécution et les temps morts dans un programme écrit dans un langage arbitraire.
En utilisant LLVM, on peut créer une machine virtuelle pour des langages similaires à Java et sa JVM, un générateur de code pour une architecture matérielle spécifique, et des optimiseurs de compilation indépendants de toute plate-forme et de tout langage. LLVM est indépendante des langages et des architectures : elle s'occupe de faire le lien vers un module spécifique au langage, et vers un générateur de code pour une machine particulière. LLVM supporte les optimisations interprocédurales (IPO) de haut niveau, propose des compilateurs statiques ou à la volée (JIT), et de nombreux composants dans différentes phases de développement (par exemple du bytecode Java et des interfaces MSIL, une interface Python, une allocation de registres par coloration de graphe, etc). Le compilateur à la volée est capable d'optimiser des branches statiques inutiles pendant l'exécution d'un programme, et est par conséquent très pratique dans des cas où le programme a plusieurs options : la plupart pouvant être facilement diagnostiquées comme inutiles quel que soit l'environnement. Pour cette raison, cette infrastructure est utilisée dans le pipeline OpenGL de Mac OS X 10.5 (Leopard) pour fournir un support pour le matériel manquant.
Elle supporte actuellement la compilation de programmes C et C++, en utilisant des interfaces dérivées des versions 3.4 et 4.0.1 de GCC. LLVM est écrite en C++ et son projet fut initié en 2000 à l'université de l'Illinois à Urbana-Champaign. Elle est publiquement disponible sous la license University of Illinois Open Source License [1], une license approuvée par l'Open Source Initiative, et qui est très similaire à la licence BSD.
[modifier] Représentation du code
LLVM offre un ensemble d'instructions indépendant de tout langage et de tout système. La plupart des instructions ont une forme similaire au code à trois adresses (3AC). Chaque instruction a également une forme d'attribution statique simple (forme SSA), ce qui veut dire que chaque variable (appelée un registre typé) est assignée une seule fois puis est figée : ceci permet de simplifier l'analyse des dépendances parmi les variables.
Toutes les sortes de conversion de type, allant de la cœrcition ascendante à la cœrcition descendante d'un objet, doivent être réalisées en utilisant explicitement l'instruction cast
. LLVM possède des types de base comme les entiers de taille fixe, et exactement cinq types dérivés, à savoir : pointeurs, tableaux, vecteurs, structures, et fonctions. Un type issu d'un langage concret peut être représenté par une combinaison de ces types dans LLVM. Par exemple, une classe en C++ peut être représentée par une combinaison de structures, fonctions, et tableaux de pointeurs de fonctions.
[modifier] Liens externes
- (en) Site officiel du projet LLVM
- (en) LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation (publication de Chris Lattner et Vikram Adve)
- (en) Manuel de référence du langage LLVM (décrit la représentation intermédiaire LLVM)
- (en) LLVM/GCC Integration Proposal (discussion au sujet de l'intégration de LLVM dans GCC)