Forum Programmation.autre Conception et implémentation de machines virtuelles

Posté par  .
Étiquettes : aucune
0
8
août
2006
Bonjour,

Après quelques recherches infructueuses, je m'adresse à toi forum.
Je serais intéressé par toutes informations sur la conception et l'implémentation d'une machine virtuelle (MV) et du bytecode dont elle pourrait se nourrir.

J'ai pu trouver beaucoup de documentations sur les MVs utilisées par des langages existant, ou sur la conception d'émulateurs de machines réelles, mais rien sur la mise en place d'un système en partant de zéro ou presque.

Pour être plus précis, j'ai un langage qui me sert à decrire des transformations d'objets d'un état vers un autre. Je souhaiterais développer le bytecode et la MV adaptés à ce langage pour donner un peu de vie à ces transformations.
Quels sont les paramètres à prendre en compte lors de la conception du bytecode ?
Quels différences pratique y a-t-il entre une VM utilisant des registres et une VM utilisant une pile ?
etc...

Le seul livre qui semble correspondre à mes attentes semble être:
Virtual Machine Design and Implementation in C/C++ par Bill Blunden.
Les critiques sont partagées et je n'arrive pas à me faire une idée de la qualité de ce bouquin.

Merci
  • # Plus d'infos ?

    Posté par  (site web personnel) . Évalué à 2.

    j'ai un langage qui me sert à decrire des transformations d'objets d'un état vers un autre


    Quel est exactement ton besoin ? Que fait ce langage ? Est-il turing-complet ?
    De combien de temps disposes-tu ?

    « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

    • [^] # Re: Plus d'infos ?

      Posté par  . Évalué à 2.

      Pas de limite de temps: c'est juste pour elargir ma culture personnelle.

      Le langage en question est simplement un pretexte pour m'initier aux machines virtuelles. Il permet de decrire les alterations physiques a appliquer a un objet pour le transformer en un autre objet: couper, coller, plier, transmuter etc... En gros un "programme" ecrit avec ce langage pourrait permettre de transformer une table en bois rouge en une chaise en plastique blanc.
      Comme tu le vois, rien de tres complexe, juste une base pour demarrer concretement le sujet.

      merci de ta reponse: j'ai peur que ce sujet soit un chouilla pointu, et ne permette pas de l'aborder simplement en autodidacte
      • [^] # Re: Plus d'infos ?

        Posté par  (site web personnel) . Évalué à 3.

        Il faut donc que tu définisse ton monde avec ses types, et ses opérations. Plus exactement tu dois décrire comment tu veux modéliser celui-ci et définir tes axiomes.

        Les "types" ou ici matière première :
        Plastique, bois, fer, etc...

        Les "opérations" ou ici les verbes :

        couper, coller, plier, transmuter etc

        Pour chacun de tes verbes, il faut que tu définisses leur paramètres respectif : type, métatype (ie indique quel type on lui donne), paramètres numériques ou pas ("couper de (x,y,z) à (x2,y2,z2)", "transmuter <pièce> en ).

        Tu vois l'idée ? Il te faut une description de toutes les opérations élémentaires, en veillant bien à ce qu'elles soient axiomatiques, c'est à dire qu'elles ne puissent pas être définies par combinaison des autres.

        Bon courage, mais c'est marrant comme idée ;-)

        « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

        • [^] # Re: Plus d'infos ?

          Posté par  . Évalué à 2.

          Si j'ai bien compris:
          A partir des operations elementaires je pourrais constituer l'ensemble de bytecodes adequats
          A partir des types je definis la nature des donnees que devra traiter ma machine virtuelle (sur un ordinateur, on parlerait de bytes de 8,16,32 ou 64 bits; dans ma machine virtuelle on parlera de couleur,matiere,coordonnees par exemple)

          Donc il y a d'abord un travail de formalisation du langage a faire avant meme de penser a la machine virtuelle. Aurais tu des references (bouquins, sites) traitant de ce sujet ? Je ne penses pas avoir ete assez loin dans la formalisation de mon langage

          Une fois cela accompli, je devrais en theorie disposer d'un ensemble de bytecodes qui doivent etre interpretes. Sans parler de machine virtuelle, mon experience personnelle me dit que l'interpretation de ce bytecode peut se faire tres simplement via un parser et une execution etapes par etapes des instructions lues. J'ai dans l'idee qu'une MV fait un peu plus que cela : dans le cadre d'un ordinateur cela correspond a la gestion de la memoire, du multi threading, de l'adressage des donnees etc... Dans le cadre de ma bizarrerie, on peut considerer les equivalences suivantes:
          espace memoire -> volume spatial disponible pour deplacer mes objets ou mes morceaux d'objets;
          type "coordonnee" -> addressage de ce volume
          type "couleur"/"matiere" -> mode de lecture et ecriture dans le volume, a savoir qu'une adresse donnee contiendrait les deux informations en fonction du mode de lecture actif dans la machine virtuelle (quand elle "voit" on lit la couleur, quand elle "touche" on lit la matiere)

          Comme tu le vois, le but est de s'eloigner un maximum des concepts d'un ordinateur pour decrire un systeme imaginaire particulier (ici un transformateur d'objets) et essayer de lui donnee vie via une MV qui necessairement va devoir creer un pont entre ce systeme et les concepts d'un ordinateur

          Mais peut etre suis je un peu trop pelleteur de nuages :)
          • [^] # Re: Plus d'infos ?

            Posté par  (site web personnel) . Évalué à 2.

            Très franchement, je ne connais pas de techno relative à ce que tu cherches, j'ai simplement appliqué une méthode pensé (problématique -> (sous problématique(s))-> solution(s)).

            Après je n'ai pas trop d'idée sur ce que tu veux faire : s'agit-il d'un modèle géométrique (nurbs), à polygone, comme dans les modèles 3D courants, ou encore d'un modèle voxel (nuage de points) ?

            C'est d'abord ce genre de question qu'il faut se poser. Comment tu veux modéliser ta table, ou ta chaise en plastique ? Comment tu peux imaginer, dans ton modèle, de faire ton morphing.

            Ensuite la progression que tu proposes me semble bonne, même si la recherche de l'équivalence avec une VM classique à la java ou dotnet est un peu trop philosophique(même si ce n'est pas totalement faux). En clair et plus abrupte, on s'en fout. Ce qui compte c'est de définir ton modèle, ensuite comment tu peux le décrire ainsi que comment le faire évoluer.

            Tiens nous au courant, c'est assez marrant comme idée ;)

            « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.