Old versionsSee all
Caml is a general-purpose programming language, designed with program safety and reliability in mind. It is very expressive, yet easy to learn and use. Caml supports functional, imperative, and object-oriented programming styles. It has been developed and distributed by INRIA, a French research institute in computer science and applied mathematics, since 1985.
Both implementations of Caml offer:
- A powerful type system, equipped with parametric polymorphism and type inference. For instance, the type of a collection can be parameterized by the type of its elements. This allows defining some operations over a collection independently of the type of its elements: sorting an array is one example. Furthermore, type inference allows defining such operations without having to explicitly provide the type of their parameters and result.
- User-definable algebraic data types and pattern matching. New algebraic data types can be defined as combinations of records and sums. Functions that operate over such data structures can then be defined by pattern matching, a generalized form of the well-known switch statement, which offers a clean and elegant way of simultaneously examining and naming data.
- Automatic memory management, thanks to a fast, unobtrusive, incremental garbage collector.
- Separate compilation of stand-alone applications. Portable bytecode compilers allow creating stand-alone applications out of Caml Light or Objective Caml programs. A foreign function interface allows Caml code to interoperate with C code when necessary. Interactive use of Caml is also supported via a “read-evaluate-print” loop.
In addition, Objective Caml features:
- A sophisticated module system, which allows organizing modules hierarchically and parameterizing a module over a number of other modules.
- An expressive object-oriented layer, featuring multiple inheritance and parametric classes.
- Efficient native code compilers. In addition to its bytecode compiler, Objective Caml offers a compiler that produces efficient machine code for many architectures.