Texte
Although computer science has become an industrial activity,
in many respects the success of a programming language is a subjective
affair. If ``the heart has its reasons of which reason knows nothing,''
then Objective CAML is a reasonable choice for a lover of heart.
It is based on solid theoretical foundations, all while providing a wide
spectrum of programming paradigms. If one adds the simplicity of
interaction with the language which the toplevel supports, that makes it a
language perfectly adapted for teaching.
-
Structured types and abstract types support approaching algorithmic
problems and their complex data structures, all while abstracting away from
problems of memory representation and allocation.
- The functional theoretical model underlying the language supplies a
precise introduction to the notions of evaluation and typing which, as a
``true programmer'', one owes it to oneself to be taught.
- The various programming models can be approached independently of one
another: from modular or object-oriented program structure to low-level
systems programming, there are few areas where Objective CAML is not useful.
- Its suitability for symbolic programming makes it an excellent
support for theoretical courses such as compiling or artifical
intelligence.
For these qualities, Objective CAML is often used as the basis of the
introductory computer science curriculum as well as for advanced programming
courses which make explicit the link between the language's high level
of abstraction and its execution. Many teachers have been and remain
seduced by the pedagogical advantages of Objective CAML and, by way of
consequence, many computer scientists have been schooled in it.
One of the first causes for satisfaction in Objective CAML development is how
comfortable it is to use. The compiler loads rapidly and its static type
inference lets nothing escape. Other static analyses of the code give
the programmer precious indices of anomalies if not errors: incomplete
pattern-matching is signaled, partial application of a function in a
sequence is detected, etc. To this first cause of satisfaction is added a
second: the compiler very rapidly generates efficient code.
Compiler performance, conciseness of expression of functional programming,
quality and diversity of libraries make Objective CAML
a language perfectly adapted to the needs of ``disposable software''.
But it would be diminishing it to restrict it to this single application
domain. For these same reasons, Objective CAML is a precious tool for
experimentation and application prototyping. Moreover, when the
structuring mechanisms of modules and objects come to be added to the
features already mentioned, the language opens the way to the conception
and development of finished applications.
Finally, Objective CAML and its developer community form a milieu which reacts
quickly to innovation in the area of programming. The free availability
and the distribution of the source code of the language offer emerging
concepts a terrain for experimentation.
Learning Objective CAML requires a certain effort from the programmer familiar
with other languages. And this, as well as the object of study is in
constant evolution. We hope that without masking the complexity of certain
concepts, this book will facilitate this phase of learning and can thus
accelerate the return on investment for the Objective CAML application
developer.