Ocalm

Ocalm
Información sobre la plantilla
Parte de la familia Lenguajes ML
Ocalm.jpeg
Lenguaje de programación avanzado.
DesarrolladorInria
Fecha de Creación1992
Última versión estableOCaml 3.12.1( 04/07/2011)
GéneroLenguaje de programación orientado a objetos
IdiomaOPenBSD, Linux,Windows 95/NT, Mac OSX, Digital, Solaris, IRIX
Sitio web
Sitio oficial de Ocaml

Ocalm: El lenguaje Objective CAML, también llamado Ocaml, es un lenguaje de programación avanzado de la familia de los lenguajes ML(Meta Lenguaje), 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.

Historia

Ocaml nace de la evolución del lenguaje CAML, abreviación de Cathegorical Abstract Machine Language, al integrársele la programación con objetos. Ocaml es uno entre muchos lenguajes funcionales (como Lisp, Écheme, Haskell) que además de programación funcional pura, permite programar empleando características imperativas, algunas características propias de lenguajes orientados a objetos e incluye un sistema de módulos que facilita el desarrollo de proyectos grandes con signaturas y funciores.

Se ha desarrollado desde 1992, con base en su predecesor Caml Special Light (inicio de la década 1990), cuyo predecesor a su vez es Caml Light (1985-1990) que pertenece a la familia de lenguajes de programación funcionales ML (que se inicio en la década de 1970).

Características

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áticos 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.

Como los demás lenguajes funcionales, emplea un recolector de basura que permite en muchos casos desentenderse del manejo de memoria dinámica (el recolector elimina automáticamente memoria que no se usa, de forma que no es necesario usar free como en C).

Cuenta con un sistema de tipos fuerte, con un derivador de tipos que facilita el chequeo estático de programas sin requerir del programador tiempo en declaración explícita de tipos. Además de tipos básicos (enteros, flotantes, booleanos, caracteres y cadenas) ofrece diversas formas de construir nuevos tipos como tuplas, arreglos, listas, registros, conjuntos, streams y facilidades para definir tipos recursivos, polimórficos y paramétricos.

Cuenta con herramientas que facilitan el desarrollo como un depurador simbólico; herramientas para análisis léxico y sintáctico; herramientas para automatizar compilación de proyectos grandes; editor y visualizador gráfico de módulos; modos para diversos editores; preprocesador muy configurable pues permite redefinir la sintaxis del lenguaje; extractor de documentación técnica; medidor de desempeño.

La distribución básica incluye diversas librerías portables para manejo de estructuras de datos (e.g. tablas de hashing, conjuntos, pilas), gráficas, aritmética de precisión arbitraria, multi-threading, emulación de Unix, interfaz para Tcl/Tk y C.

Versiones

  • ocaml-1.07 (12-Dic-2001 7:30)
  • ocaml-2.02 (12-Dic-2001 7:27)
  • ocaml-2.04 (12-Dic-2001 7:27)
  • ocaml-2.99-alpha (12-Dic-2001 19:31)
  • ocaml-3.00 (12-Dic-2001 7:28)
  • ocaml-3.01 (12-Dic-2001 7:28)
  • Ocaml-3.02 (12-Dic-2001 7:28)
  • Ocaml-3.03-alpha (12-Dic-2001 7:28)
  • ocaml-3.04 (20-Ago-2002 09:42)
  • ocaml-3.05-beta ( 20-Ago-2002 09:42)
  • ocaml-3.06 (24-May-2003 12:20)
  • ocaml-3.07 (14-Mar-2005 15:19)
  • ocaml-3.07-beta1 (22-Jul-2003 10:42)
  • ocaml-3.07-beta2 (26- Ago -2003 09:55)
  • ocaml-3.07pl2 (14-Mar-2005 15:19)
  • ocaml-3.08 (18-Ago-2005 5:40)
  • ocaml-3.09 (22-Sep-2006 11:20)
  • ocaml-3.10 (10-Mar-2008 3:14)
  • ocaml-3.11 (22-Ene-2010 4:08)
  • ocaml-3.12 (29-Ago-2011 7:32)

Tipos de compiladores

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)
  • 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.

Derivación de tipos

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 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óstrofe: ‘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)

Documentación de fuentes con Ocamldoc

La herramienta Ocamldoc permite extraer documentación de fuentes en Ocaml para generarla en HTML o en LaTeX o en Texinfo o como páginas man de Unix o como un grafo de dependencia entre módulos.

La documentación por extraer se debe poner en comentarios especiales que comienzan con (** y termina con *), tal documentación se asocia a porciones de código como funciones (de las cuales Ocamldoc extrae el tipo automáticamente) y puede incluir construcciones que se interpretan de forma especial como:

  • (b texto): para emplear negrillas
  • (i texto): para emplear itálicas
  • (c texto): para centrar
  • [texto] : estilo de letra de código fuente
  • @author texto: para establecer autor (de módulo o función)
  • @version texto: para establecer versión (de módulo o función)
  • @param id texto: para describir parámetro id de una función
  • @return texto: para describir valor retornado por una función
  • @see url: para referenciar un URL (también puede ser un archivo).

Fuente

  • Artículo Programación con Ocaml. Disponible en: “tructio.sourceforge.net”. Consultado el 6 de diciembre del 2011
  • Artículo Programación con Ocaml. Disponible en: “tructio.sourceforge.net”. Consultado el 6 de diciembre del 2011
  • Artículo Iniciación en Ocalm. Disponible en: “atryx.abcz.es”. Consultado el 6 de diciembre del 2011