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