Author: Christian.Queinnec@lip6.fr

## Objectives

Objective CAML is a programming language. One might ask why yet another language is needed. Indeed there are already numerous existing languages with new ones constantly appearing. Beyond their differences, the conception and genesis of each one of them proceeds from a shared motivation: the desire to abstract.

To abstract from the machine
  In the first place, a programming language permits one to neglect the ``mechanical'' aspect of the computer; it even lets one forget the microprocessor model or the operating system on which the program will be executed.
To abstract from the operational model
  The notion of function which most languages possess in one form or another is borrowed from mathematics and not from electronics. In a general way, languages substitute formal models for purely computational viewpoints. Thus they gain expressivity.
To abstract errors
  This has to do with the attempt to guarantee execution safety; a program shouldn't terminate abruptly or become inconsistent in case of an error. One of the means of attaining this is strong static typing of programs and having an exception mechanism in place.
To abstract components (i)
  Programming languages make it possible to subdivide an application into different software components which are more or less independent and autonomous. Modularity permits higher-level structuring of the whole of a complex application.
To abstract components (ii)
  The existence of programming units has opened up the possibility of their reuse in contexts other than the ones for which they were developed. Object-oriented languages constitute another approach to reusability permitting rapid prototyping.

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:

1. To describe in depth the Objective CAML language, its libraries and its development environment.
2. To show and explain what are the concepts hidden behind the programming styles which can be used with Objective CAML.
3. 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.