Please see Jape Installation for a description of some issues with installing Jape (written in OCaml) on a Mac running Tiger.

What is OCaml?

According to http://caml.inria.fr/ocaml/:


Objective Caml is the most popular variant of the Caml language. From a language standpoint, it extends the core Caml language with a fully-fledged object-oriented layer, as well as a powerful module system, all connected by a sound, polymorphic type system featuring type inference.

The Objective Caml system is an industrial-strength implementation of this language, featuring a high-performance native-code compiler (ocamlopt) for 9 processor architectures (IA32, PowerPC, AMD64, Alpha, Sparc, Mips, IA64, HPPA, StrongArm), as well as a bytecode compiler (ocamlc) and an interactive read-eval-print loop (ocaml) for quick development and portability. The Objective Caml distribution includes a comprehensive standard library, a replay debugger (ocamldebug), lexer (ocamllex) and parser (ocamlyacc) generators, a pre-processor pretty-printer (camlp4) and a documentation generator (ocamldoc).


The Objective Caml system is open source software: the compiler is distributed under the terms of the Q Public License, and its library is under LGPL; please read the license document for more details. A BSD-style license is also available for a fee through the Caml Consortium. The latest release can be freely downloaded on this site, and its user's manual is also available on-line.

What is Caml?

According to http://caml.inria.fr/about/index.en.html:

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.

The Caml language has been developed since 1985 at INRIA by the Formel and Cristal teams. Caml Light, which was developed in the early 1990s, is still in use today, especially in education. Objective Caml offers a richer programming language as well as efficient native code compilers for many architectures. A more detailed history of Caml is available.

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.


Feel free to leave a comment. A general wikidot.com log-in will be required, but you don't have to be a member of the Echolocation wiki. You may wish to read recent comments too (two at this point, including one from me).

Add a New Comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License