caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: redfire <jeremie.salvucci@free.fr>
To: Basile Starynkevitch <basile@starynkevitch.net>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Byte code generation for the Ocaml virtual machine (ZAM)
Date: Sun, 01 May 2011 12:55:07 +0200	[thread overview]
Message-ID: <1304247307.4147.53.camel@localhost.localdomain> (raw)
In-Reply-To: <20110501123045.bfd38cf6.basile@starynkevitch.net>

Salut Basile,

Je compile un sous ensemble de Scheme vers la ZAM. La machine virtuelle
d'Ocaml n'étant pas typée pour Scheme, je dois implémenter un mécanisme
qui va me permettre de tester les types à l'exécution.

D'après ce que j'ai compris, la machine virtuelle ne prend en compte que
les entiers de base. Le reste est géré par l'intermédiaire de primitives
C. Donc par exemple, si dans le programme source Scheme il est écrit
(display 5), je voulais stocker dans l'environnement global un couple
(2, 5). Le 2 représentant le type integer ici. Comme ça à l'exécution,
je sais que je  dois convertir cet entier en une chaîne de caractères à
l'aide de la primitive C correspondante.
Donc ici, je souhaitais sérialiser (2, 5) dans la zone data (avec le
module Marshall) en espérant récupérer un bloc composé d'au moins deux
champs dont deux d'entre eux seraient, le type et la valeur.
Malheureusement, je ne parviens pas à ce résultat. Je ne récupère que le
5.

En écrivant ce mail, je pense à une autre technique qui consisterait
plutôt à sérialiser seulement la valeur (vu que je ne parviens qu'à
récupérer celle-ci) et à générer le bloc à l'aide de MAKEBLOCK. Mais ça
me ferait modifier pas mal de choses.

Donc mon principal problème concerne la mise en place de ces couples
dans la zone data et leur récupération. Dans le mail précédent,
j'expliquais que j'ai trouvé un exemple sur internet qui sérialisait les
données dans un tableau à l'aide de Obj.repr pour mettre des données de
types différents dans un même tableau. Ensuite il fait un output value
et ça fonctionne. Sauf que ce morceau de code ne travaille que sur des
données de types primitifs et non pas de couples ou autres.

Je souhaite simplement pouvoir stocker un couple et récupérer chacun des
champs. Mais je n'ai pas trouvé de documentation qui explique clairement
et dans le détail comment tout ceci peut-être effectué.

J'espère avoir été un peu plus clair.

Il y a peut-être un moyen beaucoup plus simple de réaliser ceci mais je
ne le connais pas.

Merci à toi ;-)

Amicalement.

--
Jérémie Salvucci

Le dimanche 01 mai 2011 à 12:30 +0200, Basile Starynkevitch a écrit :
> On Sun, 01 May 2011 12:10:54 +0200
> redfire <jeremie.salvucci@free.fr> wrote:
> 
> > Hello all,
> > 
> > I'm currently doing a student project where I have to generate bytecode
> > for the caml virtual machine. I convert a subset of the Scheme language.
> > My main issue concerns the dynamic typing mechanism. My idea is to store
> > every values I manipulate like this (type, value).
> 
> Salut Jérémie, 
> 
> je suis très heureux de te lire. Par contre, je n'ai pas compris ton message (alors que je connais bien Ocaml et bien son bytecode). C'est quoi ton but exact? Coder un Scheme en Ocaml?
> 
> Amicalement
> 
> 
> 



  reply	other threads:[~2011-05-01 10:56 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-01 10:10 redfire
2011-05-01 10:30 ` Basile Starynkevitch
2011-05-01 10:55   ` redfire [this message]
     [not found]     ` <20110501130102.GX17796@localhost>
2011-05-01 13:24       ` redfire
2011-05-01 14:15     ` Guillaume Yziquel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1304247307.4147.53.camel@localhost.localdomain \
    --to=jeremie.salvucci@free.fr \
    --cc=basile@starynkevitch.net \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).