Liens connexes

Dépêche modérée par

Dépêche éditée par

0
Apple vient d'ouvrir le code de son nouveau frontend nommé "CFE". Ce frontend permet de parcourir du code C/C++/ObjC++ afin de produire un arbre de syntaxe (AST) qui permet ensuite à un compilateur de travailler dessus. Actuellement, CFE est dans un état préliminaire, n'ayant qu'un support partiel du C, mais semble avancer à grand pas. Ce frontend est avant tout destiné à LLVM (Low Level Virtual Machine).

LLVM, qui vient de sortir récemment en version 2.0, est une infrastructure de compilation libre complète ayant la particularité de mettre en avant son format intermédiaire de manière explicite, contrairement à GCC qui le garde uniquement en interne. Ainsi, il est possible de distribuer un programme sous ce format intermédiaire, qui pourra ensuite être exécuté partout. Cette approche est un peu similaire à l'approche de Microsoft avec le MSIL de .Net, mais vise ici clairement l'objectif d'avoir une performance native.

Cette représentation intermédiaire peut notamment être transformée en C, interprétée, exécutée en JIT ou compilée en natif; les performances obtenues dans ces dernier cas peuvent êtres proches de celles de GCC.

LLVM 2.0 permet désormais compiler des codes réellement complexes tels que Mozilla, Qt ou Koffice. Un backend MSIL expérimental est également fourni.

> Lire la suite (15 commentaires, moyenne: 2,9).   [dépêche : 3373 caractères]

LLVM, crée à l'UIUC et maintenant notamment développé par Apple fournit une infrastructure modulaire de compilation, avec une gestion souple et fine des passes de transformation, depuis le parsing jusqu'à la génération de code natif, en passant par de l'optimisation au moment de l'édition de lien.

LLVM fournit (entre autres) une bibliothèque pour manipuler et produire du code; il devient ainsi aisé de faire des systèmes de génération de code qui bénéficieront des optimisations du compilateur, telles que de l'inlining ou optimisation au moment de l'édition de lien; ainsi, Apple utilise cette approche pour OpenGL dans Leopard. De même, un projet Google Summer of Code essaye actuellement d'utiliser la génération dynamique de code dans Qemu, à la place du système actuel de génération de code ad-hoc basé sur GCC 3.

A noter qu'un des créateur et développeur principal de LLVM est Chris Lattner, qui n'était autre que le créateur de la Sabre OS Page que certains ici connaissent peut-être.

Actuellement, pour pouvoir analyser le code C/C++, LLVM utilise une version modifiée du frontend de GCC, produisant du code dans la représentation intermédiaire de LLVM. Cependant, le code de GCC n'étant pas très souple, la maintenance est difficile et l'expressivité faible. Ainsi, le passage à GCC 4.2 vient seulement de débuter.

Dans une présentation au meeting développeur LLVM (slides,vidéo), Steve Naroff explique en détail le pourquoi de la création d'un nouveau frontend. En pratique, celui-ci apportera plusieurs avantages :

LLVM est un projet intéressant, ayant une approche modulaire extrêmement utile pour les outils de manipulation de code qui prolifèrent. De plus, contrairement à beaucoup de compilateurs de niche ou venant de la recherche, LLVM 2.0 est réellement utilisable dans des cas complexes réels. Comme LLVM a fait le choix du C++, le nouveau frontend ne sera probablement jamais directement intégré dans GCC; cependant, il reste très intéressant par sa souplesse et modularité et deviendra probablement un incontournable pour tout les outils de manipulation de code et autres approches expérimentales.

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.

Petite remarque ...

Posté par lasher () le 12/07/2007 à 12:40. (lien). Évalué à 4.

AST = « Abstract Syntax Tree », soit arbre de syntaxe abstrait . Ce dernier mot a son importance !

Petite explication ?

Posté par chimai () le 12/07/2007 à 14:30. (lien). Évalué à 2.

L'article a l'air fort intéressant, mais est malheureusement bien trop technique pour moi... Serait-il possible de rajouter une courte explication destinée aux néophites ?

En gros, ça permet de créer des binaires pouvant tourner sur toutes les plate-formes, c'est ça ?

LLVM & OpenGL/Mesa

Posté par Sebastien Binet () le 12/07/2007 à 16:34. (lien). Évalué à 4.


Apple utilise cette approche pour OpenGL dans Leopard


J'avais lu recemment un billet de Zack Rusin a propos de LLVM et MESA:
http://zrusin.blogspot.com/2007/05/mesa-and-llvm.html

Interessant, comme d'hab'

LLVM plus rapide que GCC

Posté par loufoque () le 15/07/2007 à 18:18. (lien). Évalué à 3.

La dépêche dit que les performances de LLVM sont proches de GCC, laissant suggérer que LLVM est quelque peu plus lent.
C'est faux : le code compilé par LLVM est bien plus rapide qu'avec GCC, simplement parce que LLVM fait des optimisatons plus poussées, en particulier à l'édition de liens.

Le format intermédiaire de LLVM, de type SSA, a justement été choisi car il permettait la mise en place des tous derniers algorithmes d'optimisations issus de la recherche.

LLVM a, comme il a été dit dans un autre message, été choisi par le projet Mesa, qui va en faire des backends pour les cartes graphiques modernes. Ce qui signifie qu'à terme on pourra exécuter, en plus de GLSL, du C ou même du Python, le tout optimisé, sur son GPU.

Revenir en haut de page