IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez C++ Discussion :

[Projet] Dois-je arrêter Socoa ?


Sujet :

Contribuez C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut [Projet] Dois-je arrêter Socoa ?
    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 ?
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Florian Goo Voir le message
    Que pensez-vous de cette situation ?
    1/ Que c'est ambitieux comme projet (surtout tout seul),
    2/ Que faire ce genre de projet ne peut t'apporter que du + dans le dev. logiciel. Qu'un projet plus pro existe déjà à mon avis ne doit pas te décourager.

  3. #3
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Points : 392
    Points
    392
    Par défaut
    J'ai survolé un peu les 2 projets que tu as donnés, et il me semble que ton projet ne fasse pas vraiment doublon avec eux. Il y a une partie commune qui est l'interpretation du code, mais tu as plusieurs avantages de ton côté: l'utilisation de Boost (Wave et Spirit). Il me semble que Clang et LLVM ne s'en servent pas.

    Puis, soyons pragmatiques, il y a des centaines de projets qui fassent doublon en partie ou entièrement, et je ne pense pas que ce soit une raison d'arrêter ton projet. Au contraire, tu devrais faire parler plus de ton projet en fait. Parce que je suppose qu'après la partie analyse du code vient aussi une partie représentation, et faire cela tout seul représente un boulot aussi énorme que l'analyse elle-même.

    Bref, bonne chance et bonne continuation.


    PS: Ah oui, est-ce que tu as une liste de requêtes de features? Jai quelques idées qui te seront peut-être utile par la suite...

  4. #4
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Merci pour vos réponses, ça réconforte .

    Citation Envoyé par 3DArchi Voir le message
    1/ Que c'est ambitieux comme projet (surtout tout seul),
    Oui, j'ai fini par m'en rendre compte .
    C'est pourquoi je pensais, après avoir sorti une première mouture, parler un peu de mon projet pour demander une revue du code à la communauté du libre (j'ai même réfléchi à poster ça ici, vu les pointures qu'il y a). Et au fur et à mesure, peut-être motiver des gens pour qu'ils apportent leur pierre à l'édifice.

    Citation Envoyé par 3DArchi Voir le message
    2/ Que faire ce genre de projet ne peut t'apporter que du + dans le dev. logiciel. Qu'un projet plus pro existe déjà à mon avis ne doit pas te décourager.
    Effectivement. Je me suis dit que même si ça ne me rapportera pas directement de l'argent, que ce sera un défi intéressant et que ça pourrait faire joli sur le CV (sans parler de l'utilité du logiciel final).

    Citation Envoyé par Kurisu Voir le message
    (…) tu as plusieurs avantages de ton côté: l'utilisation de Boost (Wave et Spirit). Il me semble que Clang et LLVM ne s'en servent pas.
    Dans mon esprit il m'arrive même d'avoir le fantasme profond que Socoa soit adopté dans Boost (c'est beau de rêver) !
    Mais bon, généralement, quand on dit plusieurs, ça veut souvent dire plus de 1 .

    Citation Envoyé par Kurisu Voir le message
    Puis, soyons pragmatiques, il y a des centaines de projets qui fassent doublon en partie ou entièrement, et je ne pense pas que ce soit une raison d'arrêter ton projet.
    Certes .
    Mais ce qu'il y a, c'est que si Clang aboutit, j'aurai moi-même toutes les bonnes raisons de l'utiliser à la place de ma propre lib : le fait que Clang soit déjà utilisé par un autre gros projet est un gage de pérennité, ainsi que de fiabilité (un compilateur est très exigeant, rien ne doit fonctionner de travers) et de qualité en général, sachant que, j'imagine, l'équipe qui développe Clang n'est pas composée que d'un seul type seul dans sa chambre…

    Citation Envoyé par Kurisu Voir le message
    Au contraire, tu devrais faire parler plus de ton projet en fait. Parce que je suppose qu'après la partie analyse du code vient aussi une partie représentation, et faire cela tout seul représente un boulot aussi énorme que l'analyse elle-même.
    Comme j'ai dit à Archi, …

    Citation Envoyé par Kurisu Voir le message
    Bref, bonne chance et bonne continuation.
    Merci

    Citation Envoyé par Kurisu Voir le message
    PS: Ah oui, est-ce que tu as une liste de requêtes de features? Jai quelques idées qui te seront peut-être utile par la suite...
    Je viens de regarder dans Berlios, et il y a ça :
    http://developer.berlios.de/feature/...&group_id=9922
    C'est tout de même pratique, cette brave petite chose
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Personnellement, j'attends toujours quelque chose qui soit capable de comprendre le langage, et qui soit simple à utiliser, ne serait-ce qu'au niveau CScope (mais pour le C++) ou ctags. Juste pour fignoler mes plugins pour vim.

    Pour l'instant, il peut y avoir de la place.

    NB: dans les concurrents potentiels, tu as aussi oink/pork/elsa, gcc-xml
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Tu dis que tu parses C++ avec Boost.Spirit, sauf que c'est impossible.
    La syntaxe C++ n'est pas LALR, et encore moins LL.
    Boost ftw

  7. #7
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    Personnellement, j'attends toujours quelque chose qui soit capable de comprendre le langage, et qui soit simple à utiliser
    Je ferai tout pour

    Citation Envoyé par Luc Hermitte Voir le message
    NB: dans les concurrents potentiels, tu as aussi oink/pork/elsa, gcc-xml
    Oui, j'avais cherché s'il n'y avait rien d'équivalent avant de me lancer, et je suis effectivement tombé sur ces quelques spécimens. Je ne me souviens plus pourquoi je ne les avais pas retenu. Je crois qu'Elsa ne se débrouille pas très bien avec les templates et ne regarde pas le corps des fonctions. Pour GCC-XML, je ne sais plus…
    Il y a encore un autre projet encore plus avancé que ces deux-là, mais j'ai oublié le nom…
    EDIT: Je viens de retrouver, il s'agit de PUMA. Mais la dernière mise à jour date un peu.
    Le fait est que je doive être en mesure de lire également les commentaires (le roundtrip engineering ne doit pas perdre les commentaires et la «mise en page» du code dans la foulée). Mais j'avoue ne pas avoir encore beaucoup réfléchi à une solution pour cela…

    Citation Envoyé par loufoque
    Tu dis que tu parses C++ avec Boost.Spirit, sauf que c'est impossible.
    La syntaxe C++ n'est pas LALR, et encore moins LL.
    Vu le niveau que tu sembles avoir, je ne peux que te croire si tu me dis que ça coince quelque part dans la théorie…
    Mais le fait est que je n'ai pas eu de problème. J'ai même pu parser la STL en entier (sans en extraire aucune information toutefois) à un moment du projet où je sautais les corps de fonction et où je ne faisais aucune analyse sémantique lors de l'analyse syntaxique.
    Si ça t'intéresse, voici un lien vers mon repository GIT, vers le fichier qui contient toute la grammaire : https://git.berlios.de/cgi-bin/gitwe...6527d6e1f065e2
    Je reconnais que je n'ai pas du tout creusé dans la théorie (je n'ai aucune idée de ce que signifie LALR, LL, Recursive Descent). En fait, je me suis lancé dans le projet sans avoir jamais utilisé Boost.Spirit. Autant dire que le début a été très expérimental.
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 68
    Dernier message: 09/11/2010, 02h19
  2. Réponses: 1
    Dernier message: 28/07/2009, 14h29
  3. Projet en C, comment dois je m'organiser?
    Par condor_01 dans le forum C
    Réponses: 18
    Dernier message: 17/09/2007, 15h56
  4. Que dois-je choisir pour mon projet
    Par Emcy dans le forum Access
    Réponses: 6
    Dernier message: 09/11/2005, 08h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo