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

 C++ Discussion :

Modifier le code d'une classe au milieu de l'exécution.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Modifier le code d'une classe au milieu de l'exécution.
    Bonjour,

    Je voudrais faire un programme qui modifie souvent son propre code.

    La solution basique est de modifier la fonction voulue dans le code source, recompiler entièrement, exécuter puis de tuer le "vieux" processus. Comme cette opération arrive souvent, il faudrait trouver un moyen de la rendre plus rapide.

    En gros, pour l'instant, l'échelle à laquelle je sais modifier le code est celle du programme global. J'aimerais savoir si c'est possible de ne recompiler qu'une classe (dans son propre fichier) puis de la "lier" au programme en cours d'exécution.

    Je me demande aussi si ce que l'on appelle une bibliothèque partagée (.dll .so) peut me servir à quelque chose. J'ai pas très bien compris comment ça marche : est-ce qu'une bibliothèque partagée est choisie au début de l'exécution du programme, ou est-ce qu'on peut la changer plein de fois pendant l'exécution ?

    Merci d'avance si vous éclairez ma lanterne.

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Déjà, pourquoi voudrais tu modifier le code d'une classe en cours d'exécution

    Je t'avouerai que j'ai du mal à comprendre le but de la manoeuvre: une classe est un objet qui fournit un certain nombre de services clairement définis et non ambigus...

    Si tu vient à modifier les services que cet objet est susceptible de rendre en cours d'exécution, comment va tu bien pouvoir faire confiance à ton objet
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci de ton intérêt.

    Je n'ai pas encore réfléchi quelle est la classe à modifier, ni quelle signification ce que cela peut avoir. Pour l'instant je regarde juste si il y a un mécanisme de base qui me permettrait de réaliser le programme que j'ai en tête. La décomposition du programme en objets se fera pas avant un bout de temps. Quand je dit "modifier une classe", c'est parce que c'est la plus petite unité qu'on puisse modifier et recompiler (enfin je pense).

    Ce que je voudrais faire c'est un programme qui apprend des expériences qu'il fait et essaye d'améliorer un algorithme. C'est pour ça qu'il doit pouvoir modifier une fonction, pour voir si elle est mieux que la précédente ou pas.

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par hellfoust Voir le message
    Ce que je voudrais faire c'est un programme qui apprend des expériences qu'il fait et essaye d'améliorer un algorithme. C'est pour ça qu'il doit pouvoir modifier une fonction, pour voir si elle est mieux que la précédente ou pas.
    Le C++ n'est pas franchement le langage idéal pour un code adaptatif de type neuronal / système expert... On utilise en général des langages interprétés pour ça, ou mieux, des langages fonctionnels (interprétés eux aussi), car ils permettent de construire un programme à partir d'un autre programme, sans altérer les performances du programme construit dynamiquement (par rapport au langage, bien sûr : ça restera toujours plus lent que l'équivalent fait en C/C++ et compilé).

    On peut faire de l'IA en C/C++, bien sûr, mais l'algorithme doit être compilé : ce sont les données qui évoluent, pas le code. Par exemple, on peut parfaitement faire un réseau neuronal en C++, mais le résultat de ton IA sera des données "interprétées" par le réseau neuronal, et non pas du code C++ compilé !!

    Ce que je vois de plus proche de ton besoin, ce serait quelque chose qui oscillerait entre les algos génétiques et les réseaux de neurones... Dans les deux cas, tu vas être désagréablement surpris de la complexité du truc.

    Une solution bien plus pratique, au prix de quelques pertes de performances bien sûr, serait d'inclure un interpréteur LUA ou Python dans ton programme, et de travailler ensuite sur des fonctions LUA/Python qui, elles, pourront évoluer librement.
    Par contre, tu n'obtiendras pas les perfs d'une fonction équivalente en C ou C++, et en plus tu n'auras JAMAIS la garantie qu'un algo "optimal" dans le langage de script choisi sera lui aussi optimal en C/C++.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    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
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    ce sont les données qui évoluent, pas le code.
    On peut faire en C++ du code qui s'auto modifie. Mais t'as de grande chance de voir ton anti-virus râler
    @po : je dirais que tu mets la charrue avant les bœufs : tu penses à des détails d'implémentation alors qu'à priori tu ne connais pas encore tes specs ni ta conception.

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    On peut faire en C++ du code qui s'auto modifie. Mais t'as de grande chance de voir ton anti-virus râler
    Pour ma part, j'ai arrêté le code auto-modifiant à l'époque du DOS, avec un tracé de lignes suivant Bresenham en ASM qui "construisait" la boucle optimale directement en écrivant les opcodes... Depuis Win32, c'est effectivement le meilleur moyen de voir ton programme partir en zone de quarantaine sans préavis !
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Le C++ n'est pas franchement le langage idéal pour un code adaptatif de type neuronal / système expert...
    Le neuronal n'a rien d'auto-modifiant, c'est que des maths. Et les multiplications de matrices, et autres mises à jour de ces dernières, on maitrise très bien en C++.

    A la limite, on peut imaginer rajouter des algos d'apprentissage, mais pour ça 1- arrêter le programme ne coute rien (non mais vous avez vu le coût en temps de l'étude sur comment préparer les données?) 2- les plugins ça marche très bien. 3- les trucs ajoutés sont le résultat de longues heures de travail par une personne, cela ne sera jamais magique. Surtout avec les RdNA.


    Pour l'automodif de code, j'en étais resté au fait que les algo gen sur du code LISP ne donnaient rien de concluant -- et LISP me parait plus adapté que les langages impératifs pour ce genre de choses... (maintenant je m'amuserais plus en Prolog, mais toujours pas pour faire de l'automodifiant automagique qui est une chimère)
    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...

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    Le neuronal n'a rien d'auto-modifiant, c'est que des maths.
    Certes, j'ai fait un abus de langage, je l'admet. Disons plutôt que c'est plus simple à faire avec d'autres langages qui permettent le code auto-modifiant... Bien entendu, on peut le faire en C++, c'est juste qu'il y a beaucoup plus rapide que ce langage pour écrire / prototyper un tel système.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Le principal problème, c'est que la compilation est un processus complexe, qui nécessite au minimum pas moins de trois outils distincts:
    • le préprocesseur
    • le compilateur en lui-même
    • l'éditeur de liens
    auxquels on peut rajouter, selon le cas, des outils de génération d'archive et autres...

    Et il va de soi que chaque outil a ses propres dépendances:
    • le préprocesseur et le compilateur doivent pouvoir retrouver les fichiers d'en-tête
    • l'éditeur de lien doit pouvoir retrouver les bibliothèques tierces utilisés (voire certaines bibliothèques utilisées par défaut )

    Il me semble donc difficile d'envisager de créer une bibliothèque dynamique "à la volée" pour être en mesure de l'utiliser "directement"

    Par contre, ce que tu peux envisager de faire, c'est de factoriser au maximum les différentes parties de ton algorithmes (ce qui implique de toutes les compiler au début).

    Ton application "choisirait" les parties de l'algorithme en fonction des résultats précédents et validerait ou rejetterait les solutions les moins opportunes.

    Si l'application doit pouvoir reprendre là où elle s'est arrêtée, il peut "suffire" de sauvegarder les différentes possibilités déjà testées et la dernière possibilité retenue.

    Mais, il faut bien comprendre que l'ordinateur est un truc bête comme mes pieds qui ne connait absolument pas la nuance et qui n'a jamais que l'intelligence que l'on a été en mesure de lui insuffler...

    A l'heure actuelle (et sans doute encore pour longtemps) le choix que peut avoir un ordinateur reste limité à oui ou non, même si le chemin qui même à cette dualité essaye d'apporter un maximum de nuance.

    On est encore loin des ordinateurs qui commencent à réfléchir par eux mêmes comme on en vois dans I Robot ou dans terminator
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Comment mettre ce code dans une classe ?
    Par oranocha dans le forum Langage
    Réponses: 2
    Dernier message: 16/07/2008, 14h51
  2. Séparer le code d'une classe en x fichiers
    Par Gulix dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2007, 13h30
  3. [SQL2K] [TSQL] Modifier le code d'une chaîne
    Par nox75 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 12/10/2007, 15h53
  4. Méthode qui permet de modifier le code d'une page après affichage .. ?
    Par winnie82 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 04/07/2006, 15h40
  5. Réponses: 6
    Dernier message: 21/05/2006, 20h37

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