Pour en savoir plus
Pour bien comprendre le passage d'arguments en C et la représentation
des données, l'ouvrage Langage C : manuel de référence
([HS90]) répond aux différentes interrogations.
Pour la partie extension du langage C, c'est-à-dire sur les exceptions
et le GC, plusieurs travaux ajoutent ces fonctionnalités dont C est
dépourvu. Le lecteur intéressé par les exceptions en C
pourra lire le rapport technique ([Rob89]) qui décrit comment
implanter un tel mécanisme en utilisant des macros non fermées et les
ruptures de calcul setjmp/longjmp de C. La page de Hans Boehm
contient une distribution d'une bibliothèque pour un GC conservatif à
racines ambiguës pour C :
Lien
http://reality.sgi.com/boehm_mti/
Pour la partie interopérabilité entre Objective CAML et C, les outils
décrits dans ce chapitre restent de bas niveau et assez fastidieux
d'emploi. Néanmoins ils permettent de préciser la copie ou le partage
entre données des deux mondes. Il existe un outil de plus haut
niveau, appelé CamlIDL qui permet de créer automatiquement
les << souches >> (en anglais stub), ou fonctions
d'encapsulation, pour l'appel de fonctions C et la conversion entre
types de données. Les types et fonctions C sont décrits dans un
langage IDL (pour Interface Definition Language), proche
de C++ donc incluant C. Cette description est ensuite passée à
CamlIDL pour produire les fichiers .mli, .ml et
.c correspondant à cette encapsulation. La distribution de cet
outil s'obtient à la page suivante :
Lien
http://caml.inria.fr/camlidl/
Il existe d'autres interfaces entre Objective CAML et d'autres langages. On trouvera ces contributions à la page de la << bosse du chameau >> :
Lien
http://caml.inria.fr/hump.html
On peut citer plusieurs essais avec le langage Fortran ainsi qu'avec
un interprète de byte-code Objective CAML écrit en Java.
Enfin l'interopérabilité entre Objective CAML et d'autres langages peut
aussi être réalisée par communication de valeurs sur un réseau.
Ce thème sera abordé au
chapitre sur la programmation répartie (20).