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.