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

Langages de programmation Discussion :

Quel langage pour faire de la meta programmation ?


Sujet :

Langages de programmation

  1. #1
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Par défaut Quel langage pour faire de la meta programmation ?
    Bonjour,

    Je suis à la recherche d'un langage me permettant nativement de créer des classes complètes à l'exécution (à l'exemple de ce que propose EMF pour ceux qui connaissent).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Class maClasse = Factory.createClass('facture');
    Property prop1 = maClasse.addProperty('id_facture', Int.Class);
    
    Object obj = maClass.newInstance();
    Jai fait quelques tests en Groovy. Il est facile d'ajouter des propriétés ou des méthodes à un type à l'exécution mais je n'ai pas trouvé comment définir le type en question si ce n'est en générant manuellement la classe à l'exécution mais je trouve ça dommage d'en arriver là avec un langage dynamique.

    Des idées ?

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    As-tu déjà essayé le C++ ? Il y a un tutoriel à ce sujet ici.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Sinon, Java et .Net permettent tous les deux de créer des classes à l'exécution. Par contre, le compilo ne les reconnaîtra pas, bien sûr. Mais ça se contourne facilement avec les interfaces et les delegates.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Javassist te permet de faire ce que tu souhaites très facilement.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Par défaut
    Bonjour,

    tout d'abord joyeux noel pour ceux qui ont fêté et ensuite merci à tous pour vos réponses.

    As-tu déjà essayé le C++ ? Il y a un tutoriel à ce sujet ici.
    Excuse moi Melem mais jaurais du préciser que je recherchais plutot un langage de haut niveau, pour X raisons (question de culture personnelle, et puis le projet est aussi un projet de développement web).

    Sinon dans mes souvenirs lointains les templates en C++ ça servait plutot à paramétrer des traitements non ?

    Quand tu écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template <class T>
    const T& Max(const T& x, const T& y)
    {
        return x > y ? x : y;
    }
    Cela veut dire que tu peux remplacer T par n'importe quel type existant n'est ce pas ? Parce que je cherche à faire c'est créer de toute pièce une classe à l'exécution pour pouvoir créer ensuite instances de cette classes.

    Sinon, Java et .Net permettent tous les deux de créer des classes à l'exécution. Par contre, le compilo ne les reconnaîtra pas, bien sûr. Mais ça se contourne facilement avec les interfaces et les delegates.
    Medinoc je n'ai pas tout compris dsl
    Tu parles de créer des instances de la classe "Class" ? (dsl pr le jeu de mot bidon).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Javassist te permet de faire ce que tu souhaites très facilement.
    Je crois que c'est exactement ce que je cherches, merci Tommy31 je vais tester tout ça rapidement.

    Le code suivant résume le fond de ma pensée à savoir créer une classe Hello dynamiquement.
    Je suis très curieux de regarder le code de cette API.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ClassPool cp = ClassPool.getDefault();
            CtClass cc = cp.get("Hello");
            CtMethod m = cc.getDeclaredMethod("say");
            m.insertBefore("{ System.out.println(\"Hello.say():\"); }");
            Class c = cc.toClass();
            Hello h = (Hello)c.newInstance();
            h.say();

  6. #6
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Citation Envoyé par madfu Voir le message
    existant n'est ce pas ? Parce que je cherche à faire c'est créer de toute pièce une classe à l'exécution pour pouvoir créer ensuite instances de cette classes.
    Disons que c++ offre un cadre de méta-programmation par le jeu du préprocesseur, pour lequel il est possible de faire exécuter des programmes (l'exemple classique étant la factorielle). Mais à la compilation tout est figé, et à l'exécution aussi.

    Ce n'est pas tout à fait ce que tu cherche. Toi tu joue sur le niveau introspection/intercession du langage.

    Je suis très curieux de regarder le code de cette API.
    C'est de la génération dynamique de bytecode ! Que tu peux charger dynamiquement dans la jvm par des class loaders appropriés. Ca ouvre de nombreuses perspectives et c'est aujourd'hui abondamment utilisé par pas mal de frameworks.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Par défaut
    J'ai fait des premiers essai c'est vraiment très puissant.

    Par contre je l'utilise uniquement pour créer des classes et et je créé les attributs et méthodes avec Groovy que je trouve plus adapté pour ce genre de tâches :aussi surprenant que cela puisse paraitre je n'ai pas réussi à créer de classes from scratch en groovy alors que tout le reste est facilement géré (?)

    Merci en tout cas, je passe le sujet à résolu

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

Discussions similaires

  1. [Avis] Quel langage pour faire une GUI pour un pgm Fortran ?
    Par Radagast dans le forum Langages de programmation
    Réponses: 15
    Dernier message: 24/02/2011, 12h28
  2. Quel langage pour faire un serveur avec des sockets
    Par CocoLeNain dans le forum Services
    Réponses: 3
    Dernier message: 15/03/2008, 18h04
  3. Quel langage pour faire une application Windows et web ?
    Par tipiweb dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 30/07/2007, 13h10
  4. Quel langage pour faire des jeux en mode console ?
    Par Electroniktor dans le forum Développement 2D, 3D et Jeux
    Réponses: 11
    Dernier message: 04/07/2007, 19h14
  5. Quel langage pour faire des boucles sous FTP ?
    Par Mourne dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 04/07/2007, 16h33

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