Developing Applications with Objective Caml
The implementation of the Caml language has been ongoing for fifteen years. Its development comes from the Formel and then Cristal projects at INRIA, in collaboration with Denis Diderot University and the Ecole Normale Superieure. The continuous efforts of the researchers on these teams, as much to develop the theoretical underpinnings as the implementation itself, have produced over the span of years a language of very high quality. They have been able to keep pace with the constant evolution of the field while integrating new programming paradigms into a formal framework. We hope through this exposition to contribute to the widespread diffusion which this work deserves.
Objective CAML is a recent language which takes its place in the history of programming languages as a distant descendant of Lisp, having been able to draw on the lessons of its cousins while incorporating the principal characteristics of other languages. It is developed at INRIA1 and is supported by long experience with the conception of the languages in the ML family. Objective CAML is a general-purpose language for the expression of symbolic and numeric algorithms. It is object-oriented and has a parameterized module system. It supports the development of concurrent and distributed applications. It has excellent execution safety thanks to its static typing, its exception mechanism and its garbage collector. It is high-performance while still being portable. Finally, a rich development environment is available.
Objective CAML has never been the subject of a presentation to the ‘general public’. This is the task to which the authors have set themselves, giving this exposition three objectives:
- To describe in depth the Objective CAML language, its libraries and its development environment.
- To show and explain what are the concepts hidden behind the programming styles which can be used with Objective CAML.
- To illustrate through numerous examples how Objective CAML can serve as the development language for various classes of applications.
The authors’ goal is to provide insight into how to choose a programming style and structure a program, consistent with a given problem, so that it is maintainable and its components are reusable.