From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id TAA29330 for caml-redistribution; Thu, 4 Mar 1999 19:56:38 +0100 (MET) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id RAA32458 for ; Thu, 4 Mar 1999 17:01:23 +0100 (MET) Received: from buffalo.ens-lyon.fr (buffalo.ens-lyon.fr [140.77.1.8]) by nez-perce.inria.fr (8.8.7/8.8.7) with ESMTP id RAA28852 for ; Thu, 4 Mar 1999 17:01:21 +0100 (MET) Received: from montchat (montchat [140.77.191.106]) by buffalo.ens-lyon.fr (8.9.1a/8.9.1) with SMTP id RAA16100 for ; Thu, 4 Mar 1999 17:01:21 +0100 (MET) Date: Thu, 4 Mar 1999 17:01:21 +0100 (MET) From: Nicolas Ollinger X-Sender: nollinge@montchat To: caml-list@inria.fr Subject: [Caml-List] Dynlink + Marshaling... Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: weis 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. --