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 comandoocaml -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.