Author: Christian.Queinnec@lip6.fr

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