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