Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-List] Dynlink + Marshaling...
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Nicolas Ollinger <nollinge@e...>
Subject: [Caml-List] Dynlink + Marshaling...
ENGLISH Abstract ---------------------------------------------------
This thread discusses the ability for a Caml bytecode program to use
Dynlink and Marshal libraries together. The main question i ask is :
<< If you reload every dynamic library BEFORE getting every marshaled
value, did you keep marshaling safety ? >>
--------------------------------------------------------------------

Le contenu de ce message peut se resumer a la question suivante :
<< Si on recharge toutes les librairies dynamiquement AVANT de
recuperer les valeurs sauvees par Marshaling, est-on sur d'avoir un
marshaling sur ? >>

C'est assez obscur comme question, voici donc un exemple de programme
typique, la question est de savoir si ce programme peut marcher comme il
est decrit.

Le programme est constitue d'un fichier bytecode executable principal qui
ne change pas au cours du temps (il a ete compile une fois pour toute).
Il utilise la bibliotheque de threads et des sockets. Il agit comme une
espece de base de donnees dans laquelle on cree des fonctions de int->int
(par composition de fonctions) et on evalue ces fonctions.

Utiliser le programme revient a se connecter par un socket et a entrer des
commandes. Les commandes etant du type :

1) evaluer une fonction en un point. (ex : "f 3")
2) ordonner le chargement d'un fichier ".cmo" pour ajouter des fonctions
   a la base. (ex : "load exp.cmo")
3) creer une nouvelle fonction en associant un nom a la composition
   de deux fonctions existantes. (ex : "let h = f o exp")

Le (2) recours a l'utilisation de Dynlink, le (3) a l'utilisation de
Marshal car on veut pouvoir garder les fonctions definies d'une session
a l'autre.

Une session (ie, une execution du programme) est donc :

- Chargement des differents ".cmo" qui ont ete demandes lors des
  precedentes sessions (dans le MEME ORDRE).
- Charger les fonctions depuis la base de fonctions (ie des
  record {nom : string; f : int -> int}).
- Interagir avec les utilisateurs jusqu'a decision de l'arret du
  programme.
- Sauvegarder les fonctions dans la base de fonctions.
- Sauvegarder la liste des differents ".cmo" demandes.

La question que je me pose est : est-on assure que les objets fonctionnels
que l'on charge depuis la base de fonctions pointent sur le bon code ?
(en supposant que personne n'a fait d'allocation de code a part dynlink).

Nicolas.
--