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/