Le style fonctionnel rapproche le langage Caml de l’écriture mathématique, notamment grâce à la récursivité et au filtrage par motif(pattern matching). Ce dernier, particularité de la famille ML, offre une syntaxe au cas par cas claire et lisible, et est aussi utilisé dans le rattrapage des exceptions, en particulier pour la gestion des erreurs. Le typage fort rend l’usage sûr mais moins souple pour le programmeur. Enfin, Caml pratique l’inférence de types pour déterminer automatiquement le type des variables et expressions et permet la généricité.
Descendant du langage ML, le Caml est développé depuis 1985 par les équipes Formel puis Cristal de l'Inria et l'a notamment été pendant cinq ans par le professeur Guy Cousineau (université Paris-Diderot)[2]. La variante active de Caml est OCaml. Par rapport à l'ancienne variante Caml Light, aujourd'hui obsolète, elle ajoute de nombreuses fonctionnalités, comme un système de modules beaucoup plus poussé et le support de la programmation orientée objet (reposant sur le duck typing) dont elle tire son nom.
Consortium
La conception et le développement du langage Caml ainsi que son environnement sont fédérés par un consortium dirigé par Inria[3].
↑(en) Daniel S. Dantas, David Walker, Geoffrey Washburn et Stephanie Weirich, « PolyAML : A Polymorphic Aspect-oriented Functional Programming Language », Proceedings of the ACM SIGPLAN International Conference on Functional Programming (ICFP), vol. 40, no 9, , p. 306-319 (DOI10.1145/1086365.1086404, lire en ligne [PDF])
↑(en) Hidehiko Masuhara, Hideaki Tatsuzawa, Akinori Yonezawa et Stephanie Weirich, « Aspectual Caml : An Aspect-Oriented Functional Language », Proceedings of the ACM SIGPLAN International Conference on Functional Programming (ICFP), vol. 40, no 9, , p. 320-330 (DOI10.1145/1086365.1086405, lire en ligne [PDF])
↑(en) Mark R. Shinwell, Andrew M. Pitts et Murdoch J. Gabbay, « FreshML: Programming with Binders Made Simple », Proceedings of the ACM SIGPLAN International Conference on Functional Programming (ICFP), vol. 38, no 9, , p. 263-274 (DOI10.1145/944705.944729, lire en ligne [PDF])
↑(en) J. Furuse, « Generic Polymorphism in ML », Journées francophones des langages applicatifs (JFLA), , p. 75-96 (ISBN2-7261-1180-7, lire en ligne [PDF])