OCaml fue creado en 1996 por Xavier Leroy, Jérôme Vouillon,[1] Damien Doligez, Didier Rémy,[2] Ascánder Suárez y otros.
Por lo tanto, los programadores no necesitan estar profundamente familiarizados con el paradigma de lenguajes puramente funcionales para utilizar OCaml.
OCaml se distingue de otros lenguajes con orígenes académicos principalmente por su énfasis en el rendimiento.
[5][6] Milner y otros estaban trabajando en demostradores de teoremas, que históricamente se desarrollaban en lenguajes como Lisp.
Como resultado, desarrolló un metalinguaje para su Logic for Computable Functions (LCF), un lenguaje que solo permitía al usuario construir pruebas válidas gracias a su sistema de tipos polimórfico.
[3] Caml fue diseñado y desarrollado inicialmente por el equipo Formel de INRIA, dirigido por Gérard Huet.
A pesar de ello, considera que "Ascander, Pierre y Michel hicieron un trabajo realmente destacado".
[7] Esta nueva versión, conocida como Caml Light, reemplazó a la antigua implementación de Caml y estaba diseñada para funcionar en pequeñas computadoras de escritorio.
[3] Se añadió un compilador optimizador de código nativo al compilador de código intermedio, lo que incrementó significativamente el rendimiento, alcanzando niveles comparables a lenguajes populares como C++.
Esto dio lugar al lenguaje Objective Caml, lanzado por primera vez en 1996 y renombrado como OCaml en 2011.
[7][3] Durante las últimas dos décadas, se han añadido mejoras incrementales al lenguaje para soportar las crecientes bases de código comerciales y académicas en OCaml.
Estos cambios habilitaron el soporte para paralelismo en memoria compartida y concurrencia transparente, respectivamente.
OCaml incluye una interfaz de funciones foráneas para enlazar con primitivas en C, incluyendo soporte para vectores numéricos eficientes en formatos compatibles tanto con C como con Fortran.
Aunque OCaml no cuenta con un sistema de macros como parte indivisible del lenguaje (metaprogramación) con soporte integrado para preprocesamiento, la plataforma OCaml ofrece oficialmente una biblioteca para escribir estos preprocesadores.
Existen dos tipos: uno que trabaja a nivel de código fuente (como en C) y otro que opera a nivel del árbol de sintaxis abstracta (Abstract Syntax Tree).
El siguiente programa llamado hello.ml:Se puede compilar a un ejecutable en código intermedio (bytecode):O compilarlo a un ejecutable optimizado en código nativo:Y ejecutarlo:El primer argumento para ocamlc, "hello.ml", especifica el archivo fuente a compilar, mientras que el indicador "-o hello" especifica el archivo de salida.
La instrucción match tiene ciertas similitudes con el elemento switch de C, aunque es mucho más general.Otra forma es usar la función estándar fold, que trabaja con listas.Dado que la función anónima es simplemente la aplicación del operador +, esto se puede simplificar a:Además, se puede omitir el argumento de la lista utilizando una aplicación parcial: OCaml puede expresar de manera concisa algoritmos recursivos.
El siguiente programa calcula el número mínimo de personas en una sala para que la probabilidad de que todas tengan cumpleaños únicos sea menor al 50% (el problema del cumpleaños).
Este módulo puede cargarse en un top-level interactivo con el siguiente comando:La función factorial se puede escribir utilizando los operadores numéricos de precisión arbitraria =/, */ y -/:Esta función puede calcular factoriales mucho más grandes, como 120!
Gracias al uso de OpenGL y OCaml, los programas resultantes pueden ser multiplataforma, compilando sin ningún cambio en muchas plataformas principales.