caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-List] Dynlink + Marshaling...
@ 1999-03-04 16:01 Nicolas Ollinger
  1999-03-05  8:41 ` Fabrice Le Fessant
  0 siblings, 1 reply; 2+ messages in thread
From: Nicolas Ollinger @ 1999-03-04 16:01 UTC (permalink / raw)
  To: caml-list

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.
--




^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Caml-List] Dynlink + Marshaling...
  1999-03-04 16:01 [Caml-List] Dynlink + Marshaling Nicolas Ollinger
@ 1999-03-05  8:41 ` Fabrice Le Fessant
  0 siblings, 0 replies; 2+ messages in thread
From: Fabrice Le Fessant @ 1999-03-05  8:41 UTC (permalink / raw)
  To: Nicolas Ollinger; +Cc: caml-list


Le reponse est toute simple: Marshal ne permet de sauver que les
fonctions presentes au debut de l'execution (voir le code dans
byterun/interp.c). Donc, les fonctions ajoutees par Dynlink et par le
toplevel ne peuvent pas etre conservees.

Neanmoins, il est possible dans ton cas de conserver les bindings du
type "let h = f o exp" et de les executer a chaque debut de
session, apres chargement des modules necessaires. 

Cela dit, il faut bien faire attention que tu n'a pas d'acces direct
aux noms des fonctions presentes dans les modules (les noms utilises
dans les sources des modules). Les fonctions que tu veux utiliser
doivent donc s'enregistrer dans une table des fonctions offertes a
l'utilisateur avec un nouveau nom pour que tu puisses les retrouver
lorsque l'utilisateur va te demander la fonction "exp", etc ... 
(mais tu risques alors d'avoir des problemes de typage car cette table
sera mal typee si elle contient des fonctions de types differents
!!!!). Bien sur, il existe un module Obj ...

- Fabrice

Homepage: http://pauillac.inria.fr/~lefessan




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~1999-03-08 15:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-03-04 16:01 [Caml-List] Dynlink + Marshaling Nicolas Ollinger
1999-03-05  8:41 ` Fabrice Le Fessant

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).