URL: https://linuxfr.org/users/benoit_in/journaux/apres-le-mooc-ocaml Title: Après le MOOC OCaml Authors: Benoît Laurent Date: 2016年12月28日T22:32:59+01:00 License: CC By-SA Tags: ocaml et debian Score: 11 J’ai participé au [MOOC Ocaml](https://linuxfr.org/news/apprendre-la-programmation-fonctionnelle-avec-le-mooc-ocaml) qui s’est terminé le 18 décembre 2016. Tous les exercices du MOOC Ocaml pouvaient être faits dans un environnement du type de celui de [Try OCaml](https://try.ocamlpro.com/) Pour continuer d’apprendre OCaml et développer des projets en Ocaml sur son poste, il faut se frotter aux outils gravitant autour du langage Ocaml, principalement ceux de build. Dans ce journal je parlerais de la solution qui me semble la plus simple pour démarrer un projet OCaml et ensuite des autres outils que j’ai testés. Prélude ------- Les essais ont été faits sur une Debian stable. L’exemple d’application que je souhaite compiler est de la forme suivante: ``` src ├── main.ml └── utils.ml ``` - `main` utilise `utils` et `utils` utilise une lib externe. - la lib externe est installée avec opam. OCaml et Opam ------------- [OPAM (OCaml Package Manager)](https://opam.ocaml.org/) est à la fois le dépôt de paquets OCaml et l’outil en ligne de commande pour les gérer. Opam sait aussi gérer l’installation de plusieurs versions d’Ocaml. On l’installe avec le gestionnaire de paquet : ``` apt install opam ``` Cela installe aussi Ocaml qui est une dépendance d’Opam. On peut passer à une version plus récente d’OCaml avec : ``` opam switch 4.03.0 ``` Note aux utilisateurs de [fish](http://fishshell.com/) : `opam init` ne fonctionne pas avec fish, les scripts sont corrigés, mais il n’y a pas eu de release d’Opam depuis, voir [#2255](https://github.com/ocaml/opam/issues/2255) Outils ------ Il existe un paquet [starterkit](https://github.com/fxfactorial/ocaml-starterkit) qui facilite l’installation d’un grand nombre d’outils de développement OCaml, on l’installe avec : ``` opam install starterkit ``` C’est un meta-paquet qui installe les paquets suivants : lambda-term, ocp-indent, stringext, utop, ocp-index, merlin, ocamlfind, oasis, ocamlbuild. Démarrer un projet ------------------ On démarre un projet géré par [Oasis](http://oasis.forge.ocamlcore.org/) en créant un fichier `_oasis`, exemple ci-dessous: ``` OASISFormat: 0.4 BuildTools: ocamlbuild Plugins: META (0.4), DevFiles (0.4) Name: prog License: MIT Authors: xxx Synopsis: yyy Version: 1.1.0 Executable prog Path: src MainIs: main.ml CompiledObject: best BuildDepends: pcre ``` Le projet est ensuite initialisé avec la commande : ``` oasis setup -setup-update dynamic ``` Le projet se compile alors en lançant `make` Le démarrage et la gestion d’un projet avec Oasis est simple et semble assez standard. Il manque malgré tout la génération des fichiers pour opam avec l’intégration d’[oasis2opam](https://github.com/ocaml/oasis2opam) et la génération du fichier `.merlin` pour [Merlin](https://github.com/ocaml/merlin). Autres tests ------------ ### ocamlbuild On peut aussi utiliser directement [ocamlbuild](https://github.com/ocaml/ocamlbuild) en suivant les [exemples](https://github.com/ocaml/ocamlbuild/blob/master/manual/manual.adoc#examples) pour écrire un fichier `_tags` et un `Makefile` personnalisés. ### ocp-build Il faut créer un fichier en `.ocp` dont la syntaxe est relativement simple. Le projet s’initialise et se compile avec les commandes suivantes: ``` ocp-build init ocp-build build ``` Il ne génère pas plus de fichier qu’Oasis et nécessite de déclarer tous ses fichiers. Voir [ocp-build, a build system for OCaml applications](https://www.typerex.org/ocp-build.html) ### topkg & carcass Je n’ai pas réussi à installer carcass qui est un outil pour créer des canvas d’application compilé par topkg. Voir [topkg](http://erratique.ch/software/topkg) ### Solvuu-build [solvuu-build](https://github.com/solvuu/solvuu-build) semblait prometteur, mais je n’ai pas réussi à le faire fonctionner. Conclusion ---------- Merci à l’auteur de `starterkit` qui est aussi l’auteur de l’article [So you're learning OCaml!](http://hyegar.com/2015/10/20/so-youre-learning-ocaml/) écrit à l’occasion du premier MOOC OCaml en 2015. Cet article a été repris sur le site [ocaml.org](http://ocaml.org/) sous le titre [Crash course on the OCaml ecosystem](http://ocaml.org/learn/tutorials/get_up_and_running.html) Et vous ? Débutant dans ce langage ou non, comment abordez-vous le développement avec OCaml et son écosystème ?