Cette page regroupe quelques instructions/suggestions pour travailler confortablement avec OCaml et Rust, que ce soit à l'ENS en salles info ou sur vos machines.
Dans un terminal, exécuter (en tant que super-utilisateur) la commande
apt-get install opam
Installer homebrew puis exécuter dans un terminal la commande
brew install opam
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 eval $(opam env)On va maintenant créer un "switch" opam dédié au cours. Lancer les commandes suivantes :
opam switch create prog2 ocaml-base-compiler.4.14.0 eval $(opam env)
On peut maintenant installer des paquets opam avec la commande opam install. Installer les paquets qui seront utiles pour le cours :
opam install dune down ocamlformat eval $(opam env)Pour utiliser Down (amélioration du toplevel) :
echo -e '#use "topfind";;\n#use "down.top";;' > ~/.ocamlinit
dune init project td0_ocamlCeci va créer un dossier td0_ocaml dans le dossier courant, et l'initialiser avec un squelette minimal de projet. Le code est dans le fichier td0_ocaml/src/main.ml. Tester que tout compile bien :
cd td0_ocaml dune build dune exec bin/main.exeLors du développement, il est souvent utile d'exécuter dune en continu, de manière à ce qu'il recompile automatiquement le code à chaque modification. Pour ce faire, on lance :
dune build --watch
On peut travailler confortablement avec OCaml en utilisant un éditeur comme Emacs, Vim, ou Visual Studio Code. Dans le doute, utiliser Visual Studio Code et suivre les instructions correspondantes.
Visual Studio Code est pré-installé sur les machines de l'ENS. Si vous utilisez votre propre machine, il faudra d'abord l'installer.
Commencer par installer un paquet opam dont VScode aura besoin :
opam install ocaml-lsp-server
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 naviguer dans le dossier du projet de test td0_ocaml.
Ouvrir le fichier src/main.ml dans votre dossier de travail. Il devrait être reconnu comme un fichier OCaml (petite icône orange avec un chameau). Vérifier qu'il est typé à la volée et que les types/erreurs sont affichés.
Pour exécuter un programme OCaml, ouvrir un nouveau terminal (menu Terminal) puis y lancer la commande (par exemple) :
dune exec src/main.exe
Il est également possible d'envoyer tout le fichier à un toplevel OCaml avec Ctrl-A (tout sélectionner) puis Shift-Entrée.
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.
Si vous souhaitez utiliser emacs, vous devez installer les modes Tuareg et Merlin et ocp-indent pour Emacs avec la commande opam install tuareg merlin ocp-indent 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é.
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 enableLes 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.
Le plus simple est d'installer un environnement de développement Rust via l'outil Rustup, qui installe à la fois un compilateur Rust, et le gestionnaire de paquets Cargo. Ceci peut se faire à l'aide de la commande suivante :
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shPuis en acceptant la configuration par défaut en tapant "1" puis "Entrée". Il faut alors charger les nouvelles variables d'environnement:
source "$HOME/.cargo/env"
On peut alors créer un nouveau projet avec la commande
cargo new td0-rustqui crée un nouveau dossier td0-rust, avec une arborescence pour un simple programme "Hello, world". Le code est dans le fichier td0-rust/src/main.rs. On peut alors le compiler avec la commande :
cd td0-rust cargo buildEt l'exécuter avec la commande :
cargo run
On demandera de faire quelques exercices liés à Rust chaque semaine, appelés rustlings. On peut les installer avec la commande suivante :
curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.shOu, pour les installer dans un dossier de son choix :
curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh | bash -s mondossier/Ouvrir ensuite le dossier téléchargé dans son éditeur, et lire le fichier
README.md
(section "Doing exercises") pour commencer.
Pour développer en Rust dans Visual Studio Code, il faut installer l'extension "rust-analyzer". Comme pour OCaml, il faut chercher cette extension dans le menu accessible avec l'icône .
Il faut installer le mode Rust pour Emacs, en suivant les instructions décrites sur cette page.
Cette page est fortement inspirée de la page du cours de compilation de Jean-Christophe Filliâtre. Merci à lui.
Merci à Basile Clément, Stéphane Lengrand, Kim Nguyen et Andrei Paskevich pour leur aide dans la préparation de cette page.