Environnement OCaml

Cette page regroupe quelques instructions/suggestions pour travailler confortablement avec OCaml, que ce soit à l'ENS en salles info ou sur vos machines.

1. Pour travailler en salles info à l'ENS

Pour installer un environnement de travail OCaml confortable sur votre compte à l'ENS, le plus simple est d'utiliser un script préparé par Jérôme Boillot :
  1. télécharger le script ocaml-setup.sh ;
  2. l'exécuter avec la commande sh ocaml-setup.sh dans un terminal.
Ce script va configurer opam, installer plusieurs bibliothèques et outils OCaml, télécharger et configurer VSCode. Cela prend quelques minutes (entre trois et quatre), sans aucune interaction. Une fois que c'est fait, il faut exécuter la commande source ~/.profile si on veut continuer à travailler dans le même terminal.

Alternative : Installation manuelle

Attention, plusieurs des commandes suivantes demandent confirmation avec une ligne du style:
> Do you want to continue? [Y/n]
Il faut répondre "y" (yes) pour valider, ou "n" (no) pour abandonner, puis un retour à la ligne (touche "Entrée"). La lettre en majuscule indique le choix par défaut si vous faites simplement "Entrée". Il faut donc lancer les commandes données ci-dessous une à une et vérifier si des questions vous sont posées !

Avant d'utiliser opam pour la première fois, il faut l'initialiser. Pour ce faire, lancer les commandes suivantes :

opam init -y --shell-setup
eval $(opam env)
On peut ensuite installer des paquets opam avec la commande opam install. Installer les paquets qui seront utiles pour le cours :
CHECK_IF_PREINSTALLED=false opam install -y ocamlbuild
opam install -y menhir merlin graphics dune ocamlformat tuareg ocp-index user-setup ocaml-lsp-server
opam user-setup install
eval $(opam env)
Pour utiliser Down (amélioration du toplevel ; ne fonctionne pas sous Windows) :
opam install down
touch ~/.ocamlinit && echo '#use "down.top";;' >> ~/.ocamlinit
On peut maintenant travailler confortablement avec OCaml, notamment avec un éditeur comme Emacs ou VIM (voir plus bas). Si on souhaite utiliser Visual Studio Code, il faut suivre les instructions ci-dessous.

Visual Studio Code

Visual Studio Code n'est pas pré-installé sur les machines de l'ENS. Il faut donc commencer par l'installer. Vous pouvez le faire avec les commandes suivantes :
curl -sSL "https://code.visualstudio.com/sha/download?build=stable&os=linux-x64" -o vscode-client-linux-x64.tar.gz
tar zxf vscode-client-linux-x64.tar.gz
rm vscode-client-linux-x64.tar.gz
echo "export PATH=\$HOME/VSCode-linux-x64/bin/:\$PATH" >> $HOME/.profile

Une fois installé, vous pouvez lancer VScode en cliquant sur son icône ou avec la commande

code
Cliquer sur l'icône et chercher l'extension "OCaml Platform" en tapant "OCaml" dans la barre de recherche. L'installer.

Cliquer sur "Open folder" et choisir un dossier pour travailler, par exemple td1 (le créer si besoin avec l'icône en haut à droite du sélecteur de fichier).

Ajouter un fichier dans votre dossier de travail (par exemple insertion.ml pour le premier exercice du TD 1). Il devrait être reconnu comme un fichier OCaml (petite icône orange avec un chameau). Il est typé à la volée et les types/erreurs sont affichés.

Pour exécuter un programme OCaml, ouvrir un nouveau terminal (menu Terminal) puis y lancer une commande comme :

ocamlopt insertion.ml -o insertion && ./insertion
(ou make si on utilise un Makefile, ou dune runtest si on utilise dune, etc.)

Il est également possible d'envoyer tout le fichier à un toplevel OCaml avec Ctrl-A (tout sélectionner) puis Shift-Entrée.

Configuration de Visual Studio Code

C'est dans le menu File puis Preferences puis Settings, ou plus simplement Ctrl-,. Il y a une barre de recherche.

Pour OCaml, il est indispensable de modifier le comportement par défaut de la complétion automatique de VSCode, qui choisit la première complétion possible lorsque l'on appuie sur la touche Entrée. Sans cela, le mot-clé in en fin de ligne est automatiquement remplacé par in_channel_length ! Chercher l'option appelée Editor: Accept Suggestion On Enter et lui donner la valeur off.

2. Pour travailler sur vos machines

Ci-dessous, on donne des instructions spécifiques à différentes plateformes. Ensuite, on peut suivre les instructions de la partie 1 relatives à opam et Visual Studio Code.

Windows

Suivre les instructions d'installation sur la page OCaml for Windows. Choisir l'installateur graphique, en version 32-bit ou 64-bit selon votre machine. Cet installateur permet en particulier de choisir les paquets Cygwin à installer. Si vous souhaitez utiliser emacs, assurez-vous de choisir les paquets emacs-w32 et emacs. Il faut demander la liste complète (Full) des paquets pour les voir apparaître. Après l'installation (qui peut prendre un peu de temps), vous aurez accès à un environnement de travail de type UNIX en lançant Cygwin.

Pour utiliser l'environnement Cygwin au sein de Visual Studio Code (et donc avoir accès à OCaml depuis VScode), il faut le lancer avec ocaml-env. Vous pouvez créer un raccourci (fichier .lnk) pour automatiser cela (il faut alors lancer VScode avec ce raccourci), avec une commande similaire à "C:\Ocaml64\usr\local\bin\ocaml-env-win.exe" -- "C:\\Program Files\\Path To\\VisualStudioCode.exe". Pour trouver l'emplacement de l'exécutable de VScode sur votre machine, vous pouvez vous aider de ce lien StackOverflow.

Alternative : Si l'installation ci-dessus ne fonctionne pas, il est possible d'utiliser une machine virtuelle Linux tournant sous Windows (pas idéal, un peu lent, mais devrait fonctionner tout de même). Télécharger the course Debian live CD et installer VirtualBox. Lancer VirtualBox, créer une nouvelle installation Debian 32-bit, la lancer et choisir de démarrer depuis l'image téléchargée. Ensuite, procéder comme décrit ci-dessous pour un système Debian.

OSX

Installer homebrew puis exécuter dans un terminal la commande
  brew install opam emacs

Debian ou Ubuntu (récent)

Dans un terminal, exécuter (en tant que super-utilisateur) la commande
  apt-get install opam emacs

3. Éditeurs

Il est suggéré d'utiliser un éditeur dans lequel OCaml est bien intégré, comme Emacs, Vim ou encore Visual Studio Code. Les trois sont disponibles pour Linux, Mac et Windows et déjà installés à l'ENS.

On a expliqué plus haut comment configurer Visual Studio Code pour OCaml.

Emacs

Si vous souhaitez utiliser emacs, vous devez installer les modes Tuareg et Merlin pour Emacs avec la commande opam install tuareg merlin et suivre les instructions affichées à l'écran (voir section précédente).

La configuration d'Emacs se fait dans un fichier .emacs situé à la racine de votre compte. L'installation ci-dessus aura ajouté des lignes dans ce fichier. Au final, il pourra ressembler à quelque chose comme ça.

Le mode Merlin compile votre programme chaque fois que vous sauvez (pour signaler les erreurs), mais ne construit pas d'exécutable.

Pour construire un exécutable, vous pouvez appeler le compilateur OCaml directement depuis Emacs avec la commande Meta-x compile (Meta s'obtient avec la touche Alt ou Esc, au choix). Vous pouvez relancer la même commande avec Meta-x recompile. Si le compilateur OCaml signale une erreur, vous pouvez vous placer directement sur la position correspondante avec Meta-x next-error. Vous pouvez simplifier les raccourcis clavier de ces trois commandes en insérant par exemple les lignes suivantes dans votre fichier ~/.emacs :

(global-set-key [f5] 'compile)
(global-set-key [f6] 'recompile)
(global-set-key [f7] 'next-error)
C'est là une façon très efficace de travailler. (Et vous pourrez utiliser ces raccourcis pour toute autre chose que la programmation OCaml.)

Dans le source, on accède au type inféré par le compilateur avec Ctrl-c Ctrl-t et à la complétion avec M-x completion-at-point. Voir la documentation.

Si vous souhaitez des raccourcis Ctrl-C, Ctrl-V, Ctrl-X pour le copier-coller sous Emacs, vous pouvez ajouter la ligne

  (custom-set-variables '(cua-mode t nil (cua-base)))
à votre fichier .emacs pour activer le mode Cua pour Emacs. C'est fait dans le fichier .emacs proposé.

Vim

Pour utiliser Vim, vous devez installer le mode Merlin pour Vim avec la commande opam install merlin. Ajouter ensuite les lignes suivantes dans votre fichier de configuration Vim (par exemple ~/.vimrc) :
let g:opamshare = substitute(system('opam config var share'),'\n$','','''')
execute "set rtp+=" . g:opamshare . "/merlin/vim"

filetype plugin on
filetype indent off
syntax enable
Les deux premières lignes permettent à Vim de retrouver l'emplacement des fichiers Merlin.

On peut lancer une compilation avec :make (si la compilation est assurée par un Makefile). En cas d'erreur, le curseur sera placé à l'endroit correspondant.

Dans le source, on accède au type inféré par le compilateur avec \ t et à la complétion avec Ctrl-x Ctrl-o. Voir la documentation.


Merci à Jérôme Boillot, Basile Clément, Stéphane Lengrand, Kim Nguyen et Andrei Paskevich pour leur aide dans la préparation de cette page.
retour à la page du cours