Author: Christian.Queinnec@lip6.fr

## Autres outils de développement

Nous nous sommes cantonnés jusqu'à maintenant à la distribution d'Objective CAML. Néanmoins la communauté des développeurs dans ce langage est active, comme l'indique le nombre de transactions de la liste de diffusion `caml-list@inria.fr`. De nombreux outils, bibliothèques et extensions sont utilisés pour faciliter le développement. On détaille par la suite l'utilisation d'outils d'édition, d'extension de syntaxe, d'interfaçage avec d'autres langages et de programmation parallèle. Nous mentionnons également les nombreuses bibliothèques d'interface graphique. On retrouve la plupart de ces contributions sur le site de la << bosse du chameau >>.

### Outils d'édition

Il existe plusieurs modes reconnaissant la syntaxe Objective CAML pour l'éditeur `emacs`. L'intérêt de ces modes est d'indenter automatiquement le texte en cours d'écriture, permettant ainsi une meilleure lisibilité de celui-ci. C'est une alternative à la fenêtre d'interaction sous Windows. Puisqu'`emacs` fonctionne sous Windows, on peut lancer dans une de ses fenêtres la boucle d'interaction Objective CAML.

### Extension de syntaxe

Les outils d'analyses lexicale et syntaxique proposés dans la distribution sont déjà fort complets, mais ils ne permettent pas d'étendre la syntaxe du langage lui-même. L'outil `camlp4` (voir lien page ??) s'utilise en lieu et place de l'analyseur syntaxique d'Objective CAML. Les compilateurs de ce dernier n'ont plus qu'à procéder au typage et à la génération de code. Cet outil permet l'extension de la syntaxe du langage par l'utilisateur ou la modification de la syntaxe originale du langage. Il offre également des fonctionnalités d'affichage (pretty-printing) des arbres de syntaxe engendrés. Il devient alors facile d'écrire une nouvelle boucle d'interaction pour toute extension de la syntaxe d'Objective CAML, voire pour un autre langage implanté en Objective CAML.

### Interopérabilité avec d'autres langages

Le chapitre 12 a détaillé l'interfaçage entre le langage Objective CAML et C. Une application multi-langages tire avantage des traits utiles de chacun d'eux tout en faisant vivre en harmonie des codes différents partageant un même espace mémoire. Néanmoins l'encapsulation de fonctions C pour les rendre appelables à partir d'Objective CAML nécessite un travail fastidieux. Pour le simplifier, l'outil `camlIDL` (voir lien page ??) fournit un générateur de capsules et les outils d'importation de composants COM (Windows) en Objective CAML. Les capsules sont engendrées à partir d'un fichier des descriptions de l'interface (`IDL`).

### Interfaces graphiques

La bibliothèque `Graphics` permet de réaliser des dessins et des interactions simples, mais elle ne peut pas être considérée comme une interface graphique digne de ce nom. Le chapitre 13 a montré comment on pouvait étendre cette bibliothèque pour construire des composants graphiques répondant à certaines interactions. Le fait de reposer sur `Graphics` permet de conserver la portabilité de l'interface sur différentes plate-formes (X-Windows, Windows, MacOS), mais limite son utilisation à la couche basse des événements et des contextes graphiques.
Plusieurs réalisations tentent de combler ce manque, malheureusement aucune n'arrive à être complète, portable, documentée et simple d'emploi. Voici une liste (extraite de la << bosse du chameau >>) des principales réalisations :

- OlibRt : sous ce doux nom, c'est une véritable boîte à outils, construite au dessus de X-Windows, mais non documentée. Sa distribution contient des exemples complets en particulier de nombreux jeux.

  ### Lien

  http://cristal.inria.fr/~ddr/

- camlTk est une interface complète du toolkit Tk bien documentée. Son point faible est de dépendre des versions de Tcl/Tk ce qui la rend difficile à installer. Elle a été utilisée pour la construction du navigateur `mmm` [Rou96] écrit en Objective CAML.

  ### Lien

  http://caml.inria.fr/~rouaix/camltk-readme.html

- La bibliothèque `Xlib` a été réécrite en Objective CAML. `Efuns`, mini-clone d'`emacs` est réalisé en l'utilisant. `Xlib` n'est pas vraiment une boîte à outils, et n'est pas portable sur d'autres systèmes graphiques que X-Windows.
- mlGtk est une interface construite sur Gtk. Elle est en cours de réalisation et n'a pas de documentation. Son intérêt est d'être portable sous Unix et Windows (car Gtk l'est) de manière plus simple que Tk. D'autre part elle utilise la couche objet d'Objective CAML, ce qui n'est pas sans poser parfois quelques problèmes.
- LabTk est une interface avec Tcl/Tk, pour Unix, utilisant des extensions d'Objective CAML qui seront intégrées dans la prochaine version (voir annexe B). Elle contient sa propre distribution de Tcl/Tk qui s'installe facilement.

Malgré l'effort de la communauté, il existe un réel manque d'outils de construction d'interfaces portables. On peut espérer que LabTk devienne portable sur différents systèmes.

### Programmation parallèle et distribution

Les processus légers et les prises de communication offrent déjà les mécanismes de base pour la programmation concurrente et répartie. L'interfaçage avec le langage C permet d'utiliser les bibliothèques classiques de programmation parallèle. Seule manque une interface avec CORBA pour l'invocation de méthodes sur des objets distants. Par contre, il existe de nombreuses bibliothèques et extensions du langage qui utilisent différents modèles de parallélisme.

#### Bibliothèques

Les deux principales bibliothèques pour la programmation parallèle, `MPI` (Message Passing Interface) et `PVM` (Parallel Virtual Machine), sont interfacées avec Objective CAML. On trouve sur le site

### Lien

http://www.netlib.org

la documentation, les liens et les sources de ces bibliothèques. La << bosse du chameau >> contient les différentes adresses HTTP d'où l'on peut télécharger les versions interfacées avec Objective CAML.

#### Extensions

De nombreuses extensions parallèles de Caml-Light ou Objective CAML ont été réalisées :

- Caml-Flight ([FC95]) est une extension SPMD (Simple Program Multiple Data) du langage Caml-Light. Un programme exécute une copie de lui-même sur un nombre fixé de processus. Les communications sont explicites, il existe seulement une opération de communication `get` qui peut être exécutée uniquement à l'intérieur de l'opération de synchronisation `sync`.

  ### Lien

  http://www.univ-orleans.fr/SCIENCES/LIFO/Members/ghains/caml-flight.html

- BSML [Lou98] est une extension par des opérations BSP. Le langage préserve la compositionnalité et permet des prévisions précises de performances si le nombre de processeurs est fixé.

  ### Lien

  http://www.univ-orleans.fr/SCIENCES/LIFO/Members/loulergu/bsml.html

- OCAMLP3 [DDLP98] est un environnement de programmation parallèle basé sur le modèle des squelettes du langage P3L. Les différents squelettes prédéfinis peuvent s'imbriquer. Les programmes peuvent se tester soit en mode séquentiel soit en mode parallèle permettant ainsi de réutiliser des outils propres à Objective CAML.

  ### Lien

  http://www.di.unipi.it/~susanna/projects.html

- JoCAML [CL99] repose sur le modèle du join-calculus qui permet des opérations de haut niveau pour la concurrence, la communication et la synchronisation en présence d'objets répartis et de codes mobiles tout en conservant une gestion automatique de la mémoire.

  ### Lien

  http://pauillac.inria.fr/jocaml/

- Lucid Synchrone ([CP95]) est un langage dédié à l'implantation de systèmes réactifs. Il combine la fonctionnalité d'Objective CAML et les traits des langages de flots synchrones.

  ### Lien

  http://www-spi.lip6.fr/~pouzet/lucid-synchrone/