Author: Christian.Queinnec@lip6.fr

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