To Learn More
For a better understanding of the C language, especially argument
passing and data representations, the book
C: a reference manual [HS94] is highly recommended.
Concerning exceptions and garbage collection, several works add these
missing features to C. The technical report [Rob89] describes
an implementation of exceptions in C, based on open macros and
on the setjmp and longjmp functions from the C library.
Hans Boehm distributes a conservative collector with ambiguous roots
that can be added (as a library) to any C program:
Link
http://www.hpl.hp.com/personal/Hans_Boehm/gc/
Concerning interoperability between Objective CAML and C, the tools
described in this chapter are rather low-level and difficult to use.
However, they give the programmer full control on copying or sharing
of data structures between the two languages. A higher-level tool
called CamlIDL is available; it automatically generates the
Objective CAML ``stubs'' (encapsulation functions) for calling C functions and
converting data types. The C types and functions are described in a
language called IDL (Interface Definition Language), similar to a subset of
C++ and C. This description is then passed through the CamlIDL
compiler, which generates the corresponding .mli, .ml and
.c files. This tool is distributed from the following page:
Link
http://caml.inria.fr/pub/old_caml_site/camlidl/
Other interfaces exist between Objective CAML and languages other than C.
They are available on the ``Caml hump'' page:
Link
http://caml.inria.fr/pub/old_caml_site/hump.html
They include several versions of interfaces with Fortran, and
also an Objective CAML bytecode interpreter written in Java.
Finally, interoperability between Objective CAML and other languages can
also be achieved via data exchanges between separate programs,
possibly over the network. This approach is described in the chapter
on distributed programming (see chapter 20).