Date: June 16, 2010 9:58:19 AM GMT+02:00
To: "stephane ducasse" <stephane.ducasse(a)free.fr>
Cc: <basile(a)starynkevitch.net>
Subject: RE: contact au sujet de votre analyseur C++
Bonjour
> Nous aimerions savoir si on peut utiliser votre bibliotheque pour extraire un meta
modele
de code. Est ce que la resolution des variables est faite?
GCC MELT
http://gcc.gnu.org/wiki/MELT n'est pas un analyseur C++, c'est un
greffon [=plugin] de GCC [au niveau middle-end], et aussi un langage lispien (Domain
Specific Language) -avec un pattern matching puissant - pour coder des extensions de GCC.
Le middle-end de GCC est la majeure partie de GCC (GCC totalise 4.5MLOC, et le middle end
doit en représenter les deux-tiers). Il contient notamment beaucoup de passes de
compilations (GCC contient 250 passes, dont la plupart travaille au niveau middle-end).
Le middle-end de GCC travaille surtout sur les representations internes Gimple (&
Tree/Generic) de GCC
http://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html et
http://gcc.gnu.org/onlinedocs/gccint/GENERIC.html
GIMPLE est une représentation normalisée (à "3 adresses") -commune à C, C++,
Fortran, et tout language source accepté par GCC, et peu dépendante de la machine cible
[x86/Sparc/ARM....]- du *code* compilé par GCC. En particulier, les descriptions des
classes C++ n'y sont plus (mais elles sont dans Tree/Generic qui est accessible du
Gimple).
> Avant de vous inviter pour faire une presentation de votre outil. Avez-vous qq
> pointeurs sur votre outil?
Oui, le code de GCC MELT est une branche de GCC accessible par SubVersion et il est
compilable comme un greffon de gcc 4.5
Il y a plusieurs pages sur le wiki, voir
http://gcc.gnu.org/wiki/MELT pour commencer. On
y trouve quelques papiers sur MELT.
Il y a une documentation interne incomplète (faire un make pdf).
Il y a une liste francophone gcc-melt-french(a)googlegroups.com sur GCC
Pour une introduction aux greffons de GCC et à MELT, je vous conseille d'abord les
transparents de mon exposé (avec Zbigniew Chamski) à Solutions Linux:
http://starynkevitch.net/Basile/solinux2010-greffons-GCC.pdf
MELT permet de coder (en dialecte MELT de LISP, donc moins péniblement qu'en C) toute
extension de GCC de son middle-end, qui travaille sur les représentations internes
existantes (principalement Gimple & Tree/Generic) de GCC. On code en MELT plus
facilement qu'en C une extension de GCC. Ainsi, coder en MELT une extension de GCC est
moins fastidieux que coder en C un greffon de GCC. MELT comme les greffons étendent GCC en
y ajouter des passes supplémentaires.
J'ai un stagiaire (Jérémie Salvucci) qui a pu coder en 15 jours une extension en MELT
(qui va transcrire le Gimple en du code C, et plus tard OpenCL).
La difficulté commune au développement en C de greffons de GCC ou au développement en
MELT d'extensions de GCC est de comprendre en gros les représentations internes
principales de GCC (notamment Gimple, Tree/Generic, Edge/ControlFlowGraph, ...) et
l'organisation des (250+) passes de GCC.
Je n'ai pas compris dans le *détail* ce que vous appelez "méta-modèle du
code", et "résolution de variables". GCC fait ce genre de choses
(puisqu'il est capable de compiler C++). Mais il faut être bien conscient que Gimple
est surtout une représentation intermédiaire du *code* et pas des déclarations C++: au
niveau de Gimple par exemple, il n'y a plus de champs protected: du C++.
Je joins aussi:
un feuillet en français décrivant GCC MELT. feuille-gcc-melt-fr.pdf (2 pages rectoverso
A4). N'hesitez pas à rediffuser ce feuillet.
un papier MELT-Basile-Starynkevitch-CC2010.pdf en anglais soumis et rejeté à CC2010 sur
MELT. Merci de ne pas le rediffuser, car je voudrais en réutiliser une partie à
d'autres soumissions.
Cordialement
--
Basile STARYNKEVITCH : basile dot starynkevitch at cea dot fr
CEA LIST/DILS/LSL Saclay bat.528; 91191 GIF/YVETTE CEDEX; FRANCE
tel: +33 1 6908 6595; mobile: +33 6 8501 2359;
www.starynkevitch.net/Basile
http://www-list.cea.fr/labos/gb/LSL/index.html fax: +33 1 6908 8395
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch