Pour en savoir plus
La communication entre programmes Objective CAML distants peut être riche. L'utilisation
de protocoles texte est grandement facilitée par les outils d'analyse syntaxique du
langage (voir chapitre 11). Le mécanisme de persistance
apporté par le module
Marshal (voir chapitre 8) permet de transporter
en format interne des données complexes y compris des valeurs fonctionnelles
si les deux programmes communicants sont les mêmes. Il manque principalement
la transmission d'instances de classe.
Une solution à ce problème est d'utiliser un ORB (Object Request Broker)
pour transmettre des objets ou invoquer des méthodes distantes.
Cette architecture existe déjà pour de nombreux langages objets sous la forme
de la norme CORBA (Common ORB Architecture). Cette norme, du
groupe OMG, dont la première mouture date de de 1990,
permet d'utiliser
des objets distants en étant indépendants du langage d'implantation des classes.
Lien
http://www.omg.org
Les deux fonctions principales sont de pouvoir envoyer des objets à distance et surtout
de pouvoir référencer de plusieurs endroits du réseau un même objet, pour invoquer
ses méthodes permettant de modifier ses variables d'instances.
De plus cette norme est indépendante des langages d'implantation de ces objets distants.
Pour cela, un ORB fournit un langage de description
des interfaces appelé IDL (Interface Declaration Language), à la
manière de CAMLIDL pour l'interface entre Objective CAML et C.
Pour l'instant, il n'y a pas d'ORB intégrant le langage Objective CAML, mais il
n'y a pas d'impossibilité de réalisation car le langage IDL est un sous-ensemble
des langages objets à classes. Pour simplifier CORBA fournit un bus logiciel
(IIOP) qui permet le transfert et l'adressage de données distantes.
Le fait de pouvoir référencer le même objet de plusieurs points du réseau
simule une mémoire partagée distribuée, ce qui n'est pas sans poser de problèmes pour les récupérateurs automatiques de mémoire.
Le fait de référencer un objet distant ne provoque pas le transfert de code. On
ne peut recevoir une copie d'une instance d'une classe que si la classe existe dans le
serveur. Or pour certaines applications client-serveur, il peut être nécessaire
d'effectuer un chargement dynamique de code (applets en Java) et
même de faire migrer des processus avec leur code.
Un exemple intéressant de chargement dynamique de code distant est le navigateur MMM réalisé en Objective CAML par François Rouaix :
Lien
http://caml.inria.fr/~rouaix/mmm/
Ce navigateur permet de consulter le Web, mais aussi de télécharger
des applets Objective CAML d'un serveur pour les exécuter
dans sa fenêtre graphique.