OCaml, history and its paradigm

Caml programming language was developed by INRIA (National Institute for Research into Information and Automation of France) in 1985 with emphasis on reliability and viability of the program. Caml supports functional, imperative and object oriented programming forms. OCaml, that is Objective Caml, constitutes the basic implementation of the Caml programming language.[1] This writing covers information about the history of the OCaml programming language and its general paradigm.

As regards history of the OCaml programming language, studies were first started for adopting a theoretical language to real problems in 1958 upon John McCarthy’s inventing the Lisp programming language initially to use on theoretical samples. In 1971, Robin Milner initiated the LCF (the Logic of Computable Functions) project. The project was developed and turned into the language called “meta-language“, in short, ML , in 1973. ML and Lisp were alike in that they both provided easy analysis functional structure, but the former had a more natural, mathematics-like notation which was influenced by Pascal at a high extent. Later again, this theoretical language got stranger, and real programmers pioneered writing a real code in ML.

ML was used, among others, in National Institute for Research into Information and Automation- or INRIA of France as one of the facilities it was used on real applications. The Formel project had used ML until around 1987; however, it contained many weak points and errors. As a result; Guy Cousineau from INRIA developed the Lisp-based Categorical Abstract Machine, CAM-ML, in short CAML language, in 1987. In 1991, Xavier Leroy and Damien Doligez developed the Caml-light language. Later in 1996, Xavier Leroy, Jérôme Vouillon, and Didier Rémy contributed by including Objects and the capacity of compiling to machine code.Consequently; the Objective Caml OCaml language came into existence.[2]

It is possible to divide programming languages into two from the paradigm perspective: declarative and imperative. They are divided into subgroups such as functional, data flow, logic or constraint-based, Von Neumann languages, scripting and object-oriented languages.[3] Overall paradigm of the OCaml programming language tells us that OCaml is an object-oriented language which is a derivative of ML, and it has a multi-paradigm structure. In other words, it merges functional, imperative and object-oriented programming approaches.

On one hand, functional nature of the language provides considerable benefits; on the other hand, the object-oriented problem solving methods influenced the modern software engineering and programming practices to a considerably high extent. The OCaml programming language provides many of the features expected from the functional paradigm as well as its support for object-orientedness and further flexibility. Bearing these in mind, it is assumed that the language is quite practical and offers many ways for programmers to solve problems. Also OCaml includes object oriented structures which allow semantics to be consumed easily; therefore, programmers can shift to it so that they can be capable of functional programming without obligation to learn a possibly unfamiliar paradigm.[4]


[1] INRIA, The Caml Language (http://caml.inria.fr/), 2005.

[2] Brian Hurt, A Short History of OCaml (http://www.bogonomicon.org/bblog/ocaml-history.html), 2004.

[3] Michael Scott, Programming Language Pragmatics, Third Edition (http://proquestcombo.safaribooksonline.com/-9780080922997), 2009.

[4] Mat Kelly and Angel Brown, OCaml – A Practical Multi-Paradigm Language (http://csci618.matkelly.com/), 2010.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s