Runtime-Compiled C++ pour modifier du code pendant l'exécution
Un outil prometteur ?

Les rubriques (actu, forums, tutos) de Développez
Tags
Réseaux sociaux


 Discussion forum

Le , par germinolegrand, Expert Confirmé
Hier, dans les flux d'isocpp.org, une courte nouvelle a attiré mon attention : Runtime-Compiled C++, un outil qui permettrait la modification du code source C++ d'un programme pendant son exécution, est en bonne voie pour conquérir le monde C++.

La vidéo en page d'accueil du blog donne un aperçu des possibilités de cet outil qui supporte déjà beaucoup de compilateurs (actuellement VS, gcc et clang, support pour Windows XP+, Mac OS X 10.7+, Ubuntu 12.04 64bits) puisqu'il ne nécessite pas de lourde modification à apporter au compilateur contrairement à Cling qui repose sur la LLVM.

Un exemple d'utilisation intéressante : une console in-game exécutant directement du code C++.

Ayant dans un de mes projets actuels la contrainte technique zéro-downtime avec introduction fréquente de mises à jour, RCC++ n'a pas manqué de se retrouver dans ma liste de projets à surveiller.

Cela soulève plusieurs questions : l'introduction de cet outil affecte-t-elle les performances de l'exécutable ? Est-ce utile dans le produit fini ou est-ce à dédier à la production ?

Ce projet vous semble-t-il intéressant ?
Avez-vous des contraintes vous imposant un programme sans downtime ?
Quelle approche utilisez-vous/utiliseriez-vous pour répondre à cette contrainte ?


Sources

Le blog officiel
Le dépôt GitHub du projet


 Poster une réponse

Avatar de dougbinks dougbinks
http://www.developpez.com
Membre à l'essai
le 13/03/2013 9:58
Je suis très heureux que vous aimiez le projet. Je suis l'un des auteurs. J'espère que ceci est compréhensible, excusez-moi mon français n'est pas très bon.

Il ya très peu ou même pas d'effet sur la performance lorsque l'on utilise cette technique car le code est compilé normalement. Voir les pages "Optimizations" de la présentation https://dl.dropbox.com/u/9619385/RCC...evelop2012.pdf pour savoir comment accélérer les "virtual function calls" requis.

Notre intention pour ce projet est de l'utiliser pendant le développement. La possibilité de charger le code durant l'exécution pose des risques de sécurité, et je ne conseillerais pas de le faire sur un système client.

Je serais heureux de répondre à d'autres questions, mais je pars en voyage donc il peut y avoir des retards dans mes réponses.
Avatar de Klaim Klaim
http://www.developpez.com
Expert Confirmé
le 13/03/2013 10:19
C'est super interessant comme projet. A terme ca pourrait aussi aider a obtenir un environnement de developement ou on peut coder et voir immediatement le resultat (comme c'est deja possible avec les languages plus dynamiques).
Avatar de dougbinks dougbinks
http://www.developpez.com
Membre à l'essai
le 13/03/2013 10:32
Citation Envoyé par Klaim  Voir le message
C'est super interessant comme projet. A terme ca pourrait aussi aider a obtenir un environnement de developement ou on peut coder et voir immediatement le resultat (comme c'est deja possible avec les languages plus dynamiques).

Merci! En fait c'est déjà possible de coder et voir le résultat immédiatement. Pour avoir un environnement il faut un compilateur mais après vous pouvez utiliser un éditeur de texte.
Avatar de Klaim Klaim
http://www.developpez.com
Expert Confirmé
le 13/03/2013 10:55
*__*

Holy shit ca a l'air super!

Bon j'imagine que ca dois pas marcher avec du code graphique par contre?

Je suis tente d'utiliser ce genre de technos dans mon jeu, mais pas tout de suite.
Avatar de Troudhyl Troudhyl
http://www.developpez.com
Modérateur
le 13/03/2013 11:02
La démo dans la vidéo n'est pas assez graphique pour toi ?

Ça a l'air génial sinon, bravo.
Avatar de Klaim Klaim
http://www.developpez.com
Expert Confirmé
le 13/03/2013 11:09
Citation Envoyé par Troudhyl  Voir le message
La démo dans la vidéo n'est pas assez graphique pour toi ?

Le code graphique n'est pas impacte, il ne sagit que du comportement (IA si tu veux) des entites. En gros du code qui ne touche pas a l'api graphique.

Moi j'utilise Ogre par exemple, et admettons que j'ai du code qui cree des entites graphiques (donc, appels a OGL ou DirectX), alors si je change le code c'est difficile de ne pas avoir a tout suprimer puis recharger. Cela dis j'imagine qu'il y a moyen de faire en sorte que le moteur du jeu (qu'il soit generique ou specifique) soit code de maniere a s'adapter a ce genre de c++ live. Mais faut preparer le code pour ca.

Pour du comportement c'est beaucoup plus facile je pense, ca n'implique pas d'API particuliere.
Avatar de Troudhyl Troudhyl
http://www.developpez.com
Modérateur
le 13/03/2013 11:18
Ah j'avais pas vu cette vidéo, j'ai seulement regardé celle en haut de la page d'accueil : changement de couleur en live.
Avatar de dougbinks dougbinks
http://www.developpez.com
Membre à l'essai
le 13/03/2013 11:21
Ça marche avec le code graphique, mais on doit ajouter les libraires, voir ici pour opengl et ici pour DX (the DX library code uses an old interface, see the OpenGL example for better automatic library adding via headers). Aussi regardez les pages "Case Study" de cette présentation.

Je n'ai pas d'exemple à vous montrer pour l'instant, mais je vais le faire bientôt.
Avatar de germinolegrand germinolegrand
http://www.developpez.com
Expert Confirmé
le 13/03/2013 11:47
Je remercie beaucoup dougbinks de répondre ici

Je dois avouer que ayant 35 secondes de boot à me taper avant d'accéder réellement au jeu, pouvoir modifier directement avec le include tracker ne serait pas un mal !

Toutefois, je me demandais à quel point c'est invasif pour l'utilisation d'OpenGL, puisque je n'utilise pas ce dernier directement mais par l'écran de la SFML2 (modifier cette dernière ne me pose pas de problème, toutefois moins il y a de changement à apporter mieux c'est) elle-même derrière un moteur graphique assez conséquent.

L'introduction de RCC++ sur une grande base de code demande-t-elle des modifications importantes également ?

La possibilité de charger le code durant l'exécution pose des risques de sécurité, et je ne conseillerais pas de le faire sur un système client.

Sur un système serveur ce serait donc jouable ? J'ai quand même des doutes quand à la performance... En fait il faudrait que je me plonge dans la chose pour savoir comment elle fonctionne pour être rassuré ^^ Si ce n'est que le prix d'une virtualité à payer, ce n'est pas grand chose (voir rien du tout en fait) . (bon si y'en a partout ça peut faire mal )

Pour le système client, pour pouvoir charger le code il faut disposer du code source sinon que peut-on modifier sinon la totalité du code (et donc ça ne sert plus à grand chose de craquer de cette façon) ? Toutefois je veux bien croire que cela inclue quelques failles de sécurité en effet.

Ah, une dernière chose, est-ce utilisable avec g++ de MinGW ?
Avatar de dougbinks dougbinks
http://www.developpez.com
Membre à l'essai
le 13/03/2013 12:41
Heureux de vous aider. Je dois partir maintenant, mais je vais essayer de répondre dans un délai de quelques jours.
Offres d'emploi IT
dba oracle h/f
CDI
Sogeti - Régions - Ouest - Pays de la Loire - Lorient (56100)
Parue le 11/07/2014
Ingénieur études et développement web/hybris h/f
CDI
Galeries Lafayette - France - Paris (75000)
Parue le 26/06/2014
Architecte S.I H/F
CDI
BULL FR - Provence Alpes Côte d'Azur - Aix en Provence
Parue le 08/07/2014

Voir plus d'offres Voir la carte des offres IT
 
 
 
 
Partenaires

PlanetHoster
Ikoula