Bonjour à tous,

Je suis actuellement en train de travailler sur un projet personnel et libre du nom de Socoa. Il s'agit d'une bibliothèque effectuant une analyse d'un code source C++.
En gros, on lui donne un source C++ et le monsieur liste les différents éléments du code (telles classes, dans tels namespaces avec tels membres, etc.).
Un lien vers la page du projet sur Berlios se trouve dans ma signature.

Ce projet est un sous-ensemble d'un autre futur projet : un outil UML capable de faire du roundtrip engineering.
En pratique, on a un code, l'outil UML l'analyse et sort un diagramme de classe. En modifiant le diagramme, on met de code à jour. Dans l'autre sens, en modifiant le code, le diagramme se synchronise dessus également.

Seulement, je viens de découvrir le projet libre Clang, lié à LLVM (pour ceux qui connaissent) qui est supporté par Apple. L'ensemble de ces projets forme en fait un compilateur qui a la particularité d'être extrêmement modulaire.
Tout compilateur comporte son module d'analyse de code source (il faut bien en passer par là pour produire un code machine), habituellement intégré dans un ensemble très monolithique (c'est le cas de GCC, en tout cas). Il est d'ailleurs antinomique de parler de module dans ce cas, mais bref.

Dans le cas de Clang/LLVM, les choses sont faites pour que chaque module puisse être réutilisé dans un autre contexte. Sur le site de Clang, ils parlent explicitement d'intégration dans un IDE, d'analyse et de refactoring de code.

Bref, j'ai un peu peur que cela fasse doublon avec mon projet. Quand j'ai découvert ce projet il y a quelques jours, ça m'a mis un petit coup au moral.
J'ouvre ce topic car je me sens un peu seul dans cette interrogation.
J'ai jusque là travaillé exclusivement seul sur Socoa. Ma motivation première étant de réaliser l'outil UML de mes rêves pour rendre la conception et le développement C++ la plus agréable de mon point de vue personnel. J'ai supposé que beaucoup aimeraient un outil similaire, mais je n'en ai jamais vraiment discuté avec d'autres développeurs à plus grande échelle que quelques collègues de travail.

J'aimerais donc discuter avec vous de mon projet, vous expliquer son fonctionnement, vous montrer où il en est et réfléchir avec vous à la question de continuer ou d'arrêter son développement.



Le traitement effectué sur le code source est très similaire à ce que fait un vrai compilateur :
- Preprocessing (grâce à la lib Boost.Wave)
- Analyse syntaxique (grâce à Boost.Spirit), avec des bouts d'analyse sémantique dedans (c'est le C++ qui veut ça), produisant un Abstract Syntax Tree (AST)
- Analyse sémantique, produisant toutes les infos nécessaires pour construire un diagramme UML avec lequel travailler

À ce jour, je travaille sur le name lookup (analyse sémantique, donc) afin de pouvoir analyser correctement les expressions avec des templates. Le name lookup consiste à chercher quel symbole (type, namespace, variable) correspond quel identifiant. Par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
class c
{
};
 
int main()
{
    char c;
    //...
    c = 0; //c désigne le char de main, et non la classe du namespace global
}
La grammaire (utilisée pour l'analyse syntaxique) est complète pour le C++98/03.
Le preprocesseur est complet, étant donné que tout est délégué à Wave.

Étant donné que je ne pense pas un jour m'interfacer avec un compilateur comme le fait Clang, j'imagine que mon avantage dans tout cela est que l'analyse sera plus légère, sachant que je me spécialise dans un cas d'utilisation qui ne nécessite pas une analyse exhaustive.
L'autre avantage, c'est que Clang n'est pas encore très avancé sur le plan du C++. Ils estiment à 2 ans le temps minimum à attendre avec d'avoir quelque chose d'utilisable.


Que pensez-vous de cette situation ?