Ocaml

lenguaje de programación

El lenguaje Objective CAML, también llamado Ocaml u O'Caml, el nombre proviene de las siglas en inglés Objective Categorical Abstract Machine Language. Es un lenguaje de programación avanzado de la familia de los lenguajes ML, desarrollado y distribuido por el INRIA en Francia. Ocaml admite los paradigmas de programación imperativa, programación funcional y programación orientada a objetos.

Ocaml nace de la evolución del lenguaje CAML, abreviación de Categorical Abstract Machine Language, al integrársele la programación con objetos.

El código fuente en Ocaml se compila en código para una máquina virtual o en código de máquina para diferentes arquitecturas. Este último compilador produce código comparable en eficiencia al producido por compiladores como el del lenguaje C/C++.

Ocaml dispone de un análisis de tipos estático con inferencia de tipos, con valores funcionales de primera clase, polimorfismo parametrizado, llamada por patrones, manejo de excepciones, recolección de basura y otras características avanzadas.

Derivación de tiposEditar

Tipos básicos:

  • int: enteros, comprendidos entre min_int y max_int.
  • float: reales en coma flotante.
  • bool: valores lógicos { true / false }
  • char: caracteres del código ASCII. Por ejemplo: ‘a’ (comillas simples).
  • string: cadenas de chars. Por ejemplo: “a” (comillas dobles). La cadena más simple es la vacía: “”.

Ocaml es fuertemente tipado es decir que toda expresión tiene un tipo único y sólo pueden aplicarse valores a funciones cuando el tipo del valor corresponde al tipo esperado por la función. Por ejemplo (+) es la función que suma dos enteros, mientras (+.) es la que suma dos flotantes (en general los operadores entre enteros tienen una análogo para flotantes cuyo nombre termina con el carácter punto).

La ventaja de este tipado es la posibilidad de derivar automáticamente el tipo de expresiones (librando al programador de esa tarea). Por ejemplo una expresión como fun y -> y +. y es una función que recibe un flotante y retorna un flotante, lo derivamos sabiendo que (+.) recibe dos flotantes y retorna un flotante.

Algunos operadores habituales:

  • Para int: + -- * /
  • Para float: +. -. *. /. (* igual que en los int, pero seguidos de un punto. En Ocaml no se sobrecargan los nombres, por eso no se llama de igual forma la suma de enteros que la de reales *)
  • Para bool: && (conjunción) || (disyunción)
  • Para string: ^ (concatenación)

El motor de tipos de Ocaml infiere los tipos, y si un tipo es desconocido o no se puede inferir, lo representa como alfa, beta, etc. Dado que el compilador no puede mostrar letras griegas en pantalla, se referirá a ellas con la letra correspondiente precedida de un apóstrofo: ‘a, ‘b, ‘c, etc.

Por eso Ocaml es un lenguaje de programación funcional con cuatro características básicas:

Está fuertemente “tipado“: (Cualquier dato es de un tipo conocido). El “tipaje” es estático :Todos los tipos existen. No se crean nuevos. Las expresiones se evalúan de forma “eager” :(estricta o completa, es decir, se evalúan todas las entradas/salidas posibles)

Tipos de compiladoresEditar

En cuanto a interpretación/compilación se basa en un modelo de máquina abstracta portable (máquina Zinc). Cuenta con un intérprete (ocaml) que es a su vez un entorno interactivo útil para experimentar y dos compiladores:

  • ocalm: También llamado ‘top-level’, compilador interactivo (a tiempo real)
  • ocamlc: También llamado ‘batch_compiler’, compilador “batch” (por lotes). Genera código ocaml. Genera bytecode utilizable por la máquina Zinc y portable a toda arquitectura donde se ha portado la máquina Zinc (incluyendo x386/OpenBSD, x386/Linux, x386/Windows 95-NT, Mac, Digital, Solaris, IRIX).
  • ocamlrun: También llamado ‘runtime’, máquina que ejecuta código compilado.
  • ocamlopt: También llamado ‘batch_compiler’, compilador optimizado. Genera código nativo o máquina (para el sistema en el que se está trabajando). Los archivos compilados con ocamlopt suelen ser más grandes que con ocaml. Genera binarios para diversas arquitecturas (incluyendo [[procesadores i386 con sistemas operativos OpenBSD y Linux).

Una diferencia entre ocaml y ocamlc, por ejemplo, si se indica una misma instrucción, en ocaml se ejecutará y mostrará por pantalla su resultado, mientras que con ocamlc se ejecutará pero no se verá nada.

ReferenciasEditar

Enlaces externosEditar