Primeros pasos con OCaml

Instalación o configuración

Instalación de OPAM

OPAM es un administrador de paquetes para OCaml. Construye y administra versiones del compilador y bibliotecas OCaml fácilmente.

La forma más fácil de instalar OPAM en su sistema operativo es usar un administrador de paquetes para su sistema. por ejemplo, apt-get, yum o homebrew.

Instrucciones de instalación de Mac OSX

Actualice las fórmulas homebrew e instale OPAM.

brew update
brew install opam

Instrucciones de instalación de Ubuntu

add-apt-repository ppa:avsm/ppa
apt-get update
apt-get install ocaml opam

Compilando desde la fuente

wget http://caml.inria.fr/pub/distrib/ocaml-4.03/ocaml-4.03.0.tar.gz
tar xf ocaml-4.03.0.tar.gz
cd ocaml-4.03.0
./configure -prefix installation_path
make world.opt
make install

Inicializando OPAM

Una vez que haya instalado OPAM, ejecute opam init y siga las instrucciones.

Una vez hecho esto, debería poder ejecutar el intérprete OCaml desde su shell.

$ ocaml
        OCaml version 4.03.0

#

Tu primer programa en OCaml

Ahora que la distribución de OCaml está disponible en su sistema operativo favorito, podemos crear su primer programa en OCaml: ¡Hola Mundo!

Tenemos diferentes formas de lanzar un programa OCaml.

El REPL (nivel superior)

Puede ejecutar su código interactivamente con el nivel superior. Con OCaml toplevel, puede escribir y ejecutar código OCaml, como un shell de UNIX. Luego, toplevel verifica el tipo de su código inmediatamente. Por lo tanto, puede probar rápida y fácilmente algunas partes del código sin compilación ni ejecución.

Puede iniciar toplevel con el comando ocaml. Luego, puede escribir una oración OCaml terminada en ;; que se evalúa inmediatamente. El nivel superior muestra el tipo y el valor de su expresión justo después de:

# "Hello Worlds!";;
- : string = "Hello Worlds!"

También es posible iniciar toplevel en su archivo. Puedes ver esta explicación sobre eso.

Para facilitar su entrada en el nivel superior, puede usar una herramienta como ledit o rlwrap que proporciona algunas funciones (como el historial de entrada):

 $ ledit ocaml

 $ rlwrap ocaml

Compilación del código de bytes

Tenemos dos compiladores diferentes, uno que compila en bytecode y el otro que compila en código nativo. El primero es el mismo que el bytecode de la máquina virtual de Java. Entonces, el bytecode es menos eficiente pero más portátil.

Tenemos algunos archivos de extensiones utilizados por los compiladores OCaml:

extensión definición
.ml El código fuente (como .c en C)
.mli La interfaz (como .h en C)
.cmo Código fuente compilado por ocamlc en bytecode
.cmi Código de interfaz compilado por ocamlc
.cmx y .o Código fuente compilado por ocamlopt en código nativo
.cma Biblioteca (contenedor de algunos *.cmo) en bytecode
.cmxa y .a Biblioteca en código nativo
.cmxs Biblioteca en código nativo (para cargar dinámicamente)

El compilador bytecode es ocamlc.

Tienes diferentes opciones comunes:

  • -c: para compilar un archivo fuente sin el proceso de vinculación (para producir un ejecutable). Entonces, el comando ocaml -c foo.ml produce un archivo .cmo. A diferencia de C, en el que no es necesario compilar el archivo de encabezado, en OCaml es necesario compilar el archivo .mli: ocaml -c foo.mli.

Primero debe compilar la interfaz. Cuando compila el archivo fuente después, OCaml intenta verificar que la implementación coincida con la interfaz.

El archivo .mli no es obligatorio. Si compila un archivo .ml sin un archivo .mli, OCaml producirá un archivo .cmi automáticamente.

  • -o: para compilar algunos archivos .cmo en un ejecutable. Por ejemplo: ocamlc -o program foo.cmo bar.cmo. Estos archivos deben organizarse por las dependencias para las que el primer archivo no tiene dependencia.

  • -I: para indicar otro directorio donde el compilador puede encontrar los archivos necesarios para la compilación (como la interfaz o el código fuente). Es lo mismo que el -I de un compilador de C.

Tenemos muchas otras opciones. Puedes ver el [manual][manual] para más información.

Entonces, puede escribir hello.ml ahora y compilar este archivo con ocamlc -o hello hello.ml para producir un programa bytecode:

let () = print_endline "Hello World!"

El let () = ... es la primera entrada de su programa (como el main en C). Después, usamos la función print_endline (proporcionada por la biblioteca estándar) con el argumento "Hello World!" para imprimir Hello Worlds con una nueva línea en la salida estándar.

Después de la compilación, tiene el archivo .cmo y el archivo .cmi producidos automáticamente por el compilador y su programa hello. Puede abrir su programa y, en la parte superior de este archivo, puede ver:

#!/usr/local/bin/ocamlrun

Eso significa que su programa necesita el programa ocamlrun (proporcionado por la distribución) para ejecutar el bytecode (como la JVM).

Compilación al código nativo

Tenemos otro compilador que produce código nativo. El compilador es: ocamlopt. Sin embargo, el ejecutable resultante no puede funcionar en la mayoría de las otras arquitecturas.

ocamlopt usa las mismas opciones que ocamlc para que pueda ejecutar ocamlopt -o hello hello.ml. Después, puede ver un archivo .cmx y .o.

Finalmente, desde su bytecode/programa de código nativo, puede ejecutar:

$ ./hello
Hello World!
$

1: https://www.wikiod.com/es/ocaml/escriba-su-primer-script-ocaml#Hola Mundo [manual]: http://caml.inria.fr/pub/docs/manual-ocaml/comp.html

Instalación en Windows (nativo)

Premisa

Estas instrucciones muestran un procedimiento para instalar binarios OCaml nativos en Windows. Si su sistema operativo es Windows 10 (Insider Preview) compilación 14316 o posterior, también puede instalar OCaml a través de Bash en Ubuntu en Windows. En este caso, siga las instrucciones para instalar OCaml en Ubuntu.

Instalar OCaml y Opam

Descargar Distribución oficial de OCaml. Contiene compiladores OCaml y administrador de paquetes Opam. Suponga que ha instalado el software en C:/OCaml. Para asegurarse de haber instalado OCaml correctamente, abra cmd.exe y escriba ocaml.

Si ve el mensaje 'ocaml' no se reconoce como un comando interno o externo, un programa operable o un archivo por lotes, debe agregar C:/OCaml/bin a su ruta (variable de entorno).

Agregar binarios OCaml a la ruta

en Panel de control > Sistema y seguridad > Sistema > Configuración avanzada del sistema (a la izquierda) > Variables de entorno y luego seleccione Ruta en la pestaña Variable del sistema, luego Editar.

Agregue C:/OCaml/bin; a la lista.

Instalar Cygwin

Sin Cygwin no puedes usar Opam. De hecho, si intenta abrir Opam escribiendo opam en cmd.exe, muestra un mensaje: Error fatal: excepción Unix.Unix_error(20, "create_process", "cygcheck").

Descargue Cygwin e inicie el instalador. Asegúrese de revisar los siguientes paquetes:

  • fabricación automática
  • difícil
  • línea libre
  • hacer
  • m4
  • mingw64-x86_64-gcc-núcleo -mingw64-x86_64-gmp
  • mingw64-x86_64-openssl -mingw64-x86_64-pkg-config -mingw64-x86_64-sqlite3
  • parche
  • envoltura
  • descomprimir
  • wget

Suponga que ha instalado el software en C:/cygwin (C:/cygwin64 para la versión de 64 bits). Abra cmd y escriba wget (o uno de los ejecutables presentes en C:/cygwin/bin) para verificar si puede usar los ejecutables de Cygwin. Si el ejecutable no se abre, agregue C:/cygwin/bin a su ruta (variable de entorno).

Configurar Opam

Abra cmd.exe y escriba opam init para configurar Opam.

Luego instale ocamlfind (parte del compilador OCaml) con

opam install ocamlfind
opam config env

Comprueba si ocamlfind está instalado escribiéndolo en cmd.exe.

El comando opam config env se usa para agregar el directorio de ejecutables de opam a la ruta del entorno. Si después de cerrar la sesión ya no puede acceder a ocamlfind, puede agregarlo manualmente agregando a la ruta la siguiente línea: C:/Users/<your user>/Documents/.opam/system/bin/.

Instalando paquetes

Los paquetes se instalan a través de Opam con el comando opam install xyz donde xyz es el nombre del paquete.

Instalar UTop

Intente ejecutar el comando opam install utop. Si no tiene errores, al escribir utop se abrirá el ejecutable.

Si ves el mensaje

[ERROR] The compilation of zed failed at "ocaml setup.ml -build".

tienes que instalar manualmente los paquetes individuales. Intente nuevamente escribiendo:

opam install zed
opam install lambda-term
opam install utop

Es posible que tanto lambda-term como utop no se instalen. Consulte la sección Solución de problemas.

Instalación del núcleo

Puede instalar el paquete core con opam install core. En la versión de Windows de 64 bits (y Cygwin de 64 bits), verá el siguiente error:

[ERROR] core is not available because your system doesn't comply with os != "win32" & ocaml-version = "4.02.3".

Solución de problemas: no se puede crear un archivo normal

Si el paquete con el nombre xyz.10.1 no se instala (donde xyz es el nombre del paquete y 10.1 su versión) con el siguiente mensaje:

install: cannot create regular file '/cygdrive/c/Users/<your user>/Documents/.opam/system/bin/<something>': File exists

Tienes que ir en este directorio:

C:\Users\<your user>\Documents\.opam\repo\default\packages\<xyz>\<xyz.10.1>\files 

y elimine el archivo xyz.10.1.install.

Solución de problemas: no se puede cargar la biblioteca compartida

Si intenta abrir algún paquete de Opam (por ejemplo: utop) y ve este error:

Fatal error: cannot load shared library dlllwt-unix_stubs
Reason: The specified module could not be found.

Ejecute opam config env nuevamente e intente reabrir el ejecutable.