Débuter avec OCaml
Sur cette page
Installation ou configuration
Installer OPAM
[OPAM][1] est un gestionnaire de paquets pour OCaml. Il construit et gère facilement les versions du compilateur et les bibliothèques OCaml.
Le moyen le plus simple d’installer OPAM sur votre système d’exploitation consiste à utiliser un gestionnaire de packages pour votre système. par exemple apt-get, yum ou homebrew.
## Instructions d’installation de Mac OSX
Mettez à jour les formules [homebrew][2] et installez OPAM.
brew update
brew install opam
##Instructions d’installation d’Ubuntu
add-apt-repository ppa:avsm/ppa
apt-get update
apt-get install ocaml opam
Compilation à partir des sources
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
Initialisation d’OPAM
Une fois que vous avez installé OPAM, lancez opam init
et suivez les instructions.
Une fois cela fait, vous devriez pouvoir exécuter l’interpréteur OCaml à partir de votre shell.
$ ocaml
OCaml version 4.03.0
#
[1] : https://opam.ocaml.org/ [2] : http://brew.sh/
Votre premier programme en OCaml
Maintenant que la distribution OCaml est disponible sur votre système d’exploitation préféré, nous pouvons créer votre premier programme en OCaml : le Hello World !
Nous avons différentes manières de lancer un programme OCaml.
Le REPL (niveau supérieur)
Vous pouvez exécuter votre code interactivement avec le toplevel. Avec le toplevel OCaml, vous pouvez écrire et exécuter du code OCaml, comme un shell UNIX. Ensuite, le toplevel vérifie immédiatement le type de votre code. Ainsi, vous pouvez tester rapidement et facilement certaines parties de code sans compilation ni exécution.
Vous pouvez lancer le toplevel avec la commande ocaml
. Ensuite, vous pouvez écrire une phrase OCaml terminée par ;;
qui est évaluée immédiatement. Le toplevel affiche le type et la valeur de votre expression juste après :
# "Hello Worlds!";;
- : string = "Hello Worlds!"
Il est aussi possible de lancer le toplevel sur votre dossier. Vous pouvez voir cette [explication][1] à ce sujet.
Pour faciliter votre saisie dans le toplevel, vous pouvez utiliser un outil comme ledit
ou rlwrap
qui fournit certaines fonctionnalités (comme l’historique des entrées) :
$ ledit ocaml
$ rlwrap ocaml
Compilation vers le bytecode
Nous avons deux compilateurs différents, l’un qui compile en bytecode et l’autre qui compile en code natif. Le premier est le même que le bytecode de la machine virtuelle Java. Ainsi, le bytecode est moins efficace mais plus portable.
Nous avons quelques fichiers d’extensions utilisés par les compilateurs OCaml :
extension | définition |
---|---|
.ml |
Le code source (comme .c en C) |
.mli |
L’interface (comme .h en C) |
.cmo |
Code source compilé par ocamlc en bytecode |
.cmi |
Code d’interface compilé par ocamlc |
.cmx et .o |
Code source compilé par ocamlopt en code natif |
.cma |
Bibliothèque (compartiment de certains *.cmo ) en bytecode |
.cmxa et .a |
Bibliothèque en code natif |
.cmxs |
Librairie en code natif (à charger dynamiquement) |
Le compilateur bytecode est ocamlc
.
Vous avez différentes options communes :
-c
: pour compiler un fichier source sans processus de liaison (pour produire un exécutable). Ainsi, la commandeocaml -c foo.ml
produit un fichier.cmo
. Contrairement au C dans lequel le fichier d’en-tête n’a pas besoin d’être compilé, il est nécessaire en OCaml de compiler le fichier.mli
:ocaml -c foo.mli
.
Vous devez d’abord compiler l’interface. Lorsque vous compilez ensuite le fichier source, OCaml essaie de vérifier que l’implémentation correspond à l’interface.
Le fichier .mli
n’est pas obligatoire. Si vous compilez un fichier .ml
sans fichier .mli
, OCaml produira automatiquement un fichier .cmi
.
-
-o
: pour compiler certains fichiers.cmo
dans un exécutable. Par exemple :ocamlc -o program foo.cmo bar.cmo
. Ces fichiers doivent être organisés selon les dépendances pour lesquelles le premier fichier n’a aucune dépendance. -
-I
: pour indiquer un autre répertoire où le compilateur peut trouver les fichiers nécessaires à la compilation (comme l’interface ou le code source). C’est la même chose que le-I
d’un compilateur C.
Nous avons beaucoup d’autres options. Vous pouvez consulter le [manuel][manuel] pour plus d’informations.
Ainsi, vous pouvez écrire le hello.ml
maintenant et compiler ce fichier avec ocamlc -o hello hello.ml
pour produire un programme bytecode :
let () = print_endline "Hello World!"
Le let () = ...
est la première entrée de votre programme (comme le main
en C). Ensuite, nous utilisons la fonction print_endline
(fournie par la bibliothèque standard) avec l’argument "Hello World!"
pour imprimer Hello Worlds
avec une nouvelle ligne dans la sortie standard.
Après la compilation, vous avez le fichier .cmo
et le fichier .cmi
produits automatiquement par le compilateur et votre programme hello
. Vous pouvez ouvrir votre programme, et en haut de ce fichier, vous pouvez voir :
#!/usr/local/bin/ocamlrun
Cela signifie que votre programme a besoin du programme ocamlrun
(fourni par la distribution) pour exécuter le bytecode (comme la JVM).
Compilation vers le code natif
Nous avons un autre compilateur qui produit du code natif. Le compilateur est : ocamlopt
. Cependant, l’exécutable résultant ne peut pas fonctionner sur la plupart des autres architectures.
ocamlopt
utilise les mêmes options que ocamlc
donc vous pouvez exécuter ocamlopt -o hello hello.ml
. Après, vous pouvez voir un fichier .cmx
et un fichier .o
.
Enfin, depuis votre programme bytecode/code natif, vous pouvez exécuter :
$ ./hello
Hello World!
$
[1] : https://www.wikiod.com/fr/ocaml/ecrivez-votre-premier-script-ocaml#Bonjour le monde [manuel] : http://caml.inria.fr/pub/docs/manual-ocaml/comp.html
Installation sur Windows (natif)
Prémisse
Ces instructions montrent une procédure pour installer des binaires OCaml natifs dans Windows. Si votre système d’exploitation est Windows 10 (Insider Preview) build 14316
ou une version ultérieure, vous pouvez également installer OCaml via [Bash on Ubuntu on Windows][1]. Dans ce cas, suivez les instructions pour installer OCaml sur Ubuntu.
Installer OCaml et Opam
Téléchargez [distribution officielle d’OCaml][2]. Il contient à la fois les compilateurs OCaml et le gestionnaire de paquets Opam. Supposons que vous ayez installé le logiciel dans C:/OCaml
. Pour être sûr que vous avez correctement installé OCaml, ouvrez cmd.exe
et tapez ocaml
.
Si vous voyez le message 'ocaml' n'est pas reconnu comme une commande interne ou externe, un programme exécutable ou un fichier batch
vous devez ajouter C:/OCaml/bin
à votre chemin (variable d’environnement).
Ajouter des binaires OCaml au chemin
dans Panneau de configuration> Système et sécurité> Système> Paramètres système avancés (à gauche)> Variables d'environnement
, puis sélectionnez Chemin
dans l’onglet Variable système
, puis Modifier
.
Ajoutez C:/OCaml/bin;
à la liste.
Installer Cygwin
Sans Cygwin, vous ne pouvez pas utiliser Opam. En fait, si vous essayez d’ouvrir Opam en tapant opam
dans cmd.exe
, un message s’affiche : Erreur fatale : exception Unix.Unix_error(20, "create_process", "cygcheck")
.
Téléchargez [Cygwin][3] et démarrez le programme d’installation. Assurez-vous de vérifier les packages suivants :
- fabrication automatique
- diffutils
- libreadline
- Fabriquer
- m4
- mingw64-x86_64-gcc-core
- mingw64-x86_64-gmp
- mingw64-x86_64-openssl
- mingw64-x86_64-pkg-config
- mingw64-x86_64-sqlite3
- correctif
- rlwrap
- décompresser
- wget
Supposons que vous ayez installé le logiciel dans C:/cygwin
(C:/cygwin64
pour la version 64 bits). Ouvrez cmd
et tapez wget
(ou l’un des exécutables présents dans C:/cygwin/bin
) pour vérifier si vous pouvez utiliser les exécutables Cygwin. Si l’exécutable ne s’ouvre pas, ajoutez C:/cygwin/bin
à votre chemin (variable d’environnement).
Configurer Opam
Ouvrez cmd.exe
et tapez opam init
pour configurer Opam.
Ensuite, installez ocamlfind
(partie du compilateur OCaml) avec
opam install ocamlfind
opam config env
Vérifiez si ocamlfind
est installé en le tapant dans cmd.exe
.
La commande opam config env
est utilisée pour ajouter le répertoire des exécutables de opam
au chemin de l’environnement. Si après la déconnexion vous ne pouvez plus accéder à ocamlfind
, vous pouvez l’ajouter manuellement en ajoutant au chemin la ligne suivante : C:/Users/<your user>/Documents/.opam/system/bin/
.
Installation de packages
Les packages sont installés via Opam avec la commande opam install xyz
où xyz
est le nom du package.
Installer UTop
Essayez d’exécuter la commande opam install utop
. Si vous n’avez aucune erreur, tapez “utop” pour ouvrir l’exécutable.
Si vous voyez le message
[ERROR] The compilation of zed failed at "ocaml setup.ml -build".
vous devez installer manuellement les packages individuels. Essayez à nouveau de saisir :
opam install zed
opam install lambda-term
opam install utop
lambda-term
et utop
peuvent ne pas s’installer. Voir la section Dépannage.
Installation du noyau
Vous pouvez installer le package core
avec opam install core
. Sur la version Windows 64 bits (et Cygwin 64 bits), vous verrez l’erreur suivante :
[ERROR] core is not available because your system doesn't comply with os != "win32" & ocaml-version = "4.02.3".
Dépannage : impossible de créer un fichier standard
Si le package portant le nom xyz.10.1
ne parvient pas à s’installer (où xyz est le nom du package et 10.1 sa version) avec le message suivant :
install: cannot create regular file '/cygdrive/c/Users/<your user>/Documents/.opam/system/bin/<something>': File exists
Il faut aller dans ce répertoire :
C:\Users\<your user>\Documents\.opam\repo\default\packages\<xyz>\<xyz.10.1>\files
et supprimez le fichier xyz.10.1.install
.
Dépannage : impossible de charger la bibliothèque partagée
Si vous essayez d’ouvrir un package Opam (par exemple : utop
) et que vous voyez cette erreur :
Fatal error: cannot load shared library dlllwt-unix_stubs
Reason: The specified module could not be found.
Exécutez à nouveau opam config env
et essayez de rouvrir l’exécutable.
[1] : https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux [2] : http://protz.github.io/ocaml-installer/ [3] : https://cygwin.com/install.html