Rust: Remplacement de code à chaud

Créé le 10 mai 2013  ·  6Commentaires  ·  Source: rust-lang/rust

Salut, j'ai regardé ceci http://www.youtube.com/watch?v=apZYqHPqzYo et j'ai pensé que ce serait bien d'avoir également un remplacement de code à chaud dans Rust.

En Java, vous avez le projet OSGi ( http://www.osgi.org/Main/HomePage ) et hotswap ( http://code.google.com/p/hotswap/ ), ce qui facilite la mise à niveau et le changement de modules de votre application sans toucher aux autres modules.

E-hard

Commentaire le plus utile

Tous les 6 commentaires

Il est vraiment, extrêmement difficile de le faire avec du code natif, en particulier de manière multiplateforme. Les machines virtuelles ont plus de facilité car elles ont un contrôle total sur le chargement du bytecode, la génération du code, le placement du code, etc.

Je ne suis pas au courant des dernières recherches sur le sujet, mais j'ai trouvé Kitsune : mise à jour de logiciel dynamique efficace et polyvalente pour C (OOPSLA 2012) intéressant.

visité pour le triage, le 17 juillet 2013. L'échange à chaud est en effet délicat, bien que certaines des choses nécessaires pour le prendre en charge (par exemple, marquer les pages comme exécutables; I-cache flushing, etc.) soient également nécessaires pour prendre en charge un compilateur JIT.

Je soupçonne que nous aurions également besoin d'un code indépendant de la position (PIC). L'article de Kitsune couvre en fait des transformations encore plus agressives, par exemple la migration des mises en page des données entre les versions. (Je n'ai fait que parcourir ce papier à ce stade.)

Ce serait cool, mais je me sens à l'aise de dire que ça n'arrivera probablement pas. Je pense qu'il y a beaucoup d'autres problèmes difficiles qui sont plus convaincants.

Cela a été fait à quelques reprises avec du code compilé via LLVM et son JIT. Ce qui le jette dans une VM et permet de faire la même chose qu'Erlang peut faire à l'intérieur de sa VM...
Inspiration : http://vimeo.com/36579366
Exemples avec C++ :

Si quelqu'un veut utiliser une VM de bas niveau, je suppose qu'il peut aussi le faire dans Rust... Pour que quelque chose comme ça fonctionne, vous devez quand même ajouter le comportement de la VM...

Cette page vous a été utile?
0 / 5 - 0 notes