Environnement de développement
Table des matières

Ci-dessous figurent différents outils, bibliothèques, extensions, ..., concernant l'environnement de développement OCaml.

1. Compilation, liaison et construction

La distribution d'OCaml fournit différents outils destinés à la compilation:

ocamlc, ocamlc.opt
Compilateur vers du code-octet, en version code-octet ou en version native Voir le manuel
ocamlopt, ocamlopt.opt
Compilateur vers du code natif, en version code-octet ou en version native Voir le manuel
ocamlmklib
Génération de bibliothèques contenant du code C et du code OCaml Voir le manuel
ocamlcp
Frontal à ocamlc permettant d'instrumenter le code pour utiliser le profileur

Les compilateurs OCaml fonctionnant en ligne de commande avec pléthore d'options, ils sont largement compatibles avec les outils de construction (build) "traditionnels" ou peuvent être appelés depuis des environnements intégrés. Citons quelques possibilités parmi les plus répandues:

Dune
Un outil de compilation automatique de code OCaml à partir d'une description du projet (noms des exécutables, bibliothèques utilisées, ...). C'est l'outil standard utilisé dans les nouveaux projets OCaml.
OCamlMakefile
Ce Makefile générique simplifie l'utilisation de Make pour OCaml.
Findlib (OCamlfind)
Un gestionnaire d'installation de paquets pour OCaml. Il fournit une commande, ocamlfind, pour compiler des fichiers OCaml, prenant en charge les options nécessaires pour utiliser les paquets OCaml installés, ce qui simplifie les commandes à indiquer par exemple dans les Makefiles.
OMake
Un système semblable à Make et supportant d'autres langages qu'OCaml.
ocamldep
Cet outil inclus dans la distribution OCaml analyse des fichiers sources et génère leurs dépendances dans un format compris par l'outil Make. Cela permet de ne pas avoir à indiquer explicitement les dépendances pour la compilation séparée des modules à l'aide d'un Makefile. Voir le manuel
2. Interprètes

L'interprète (toplevel) ocaml, inclus dans la distribution évalue au vol le code OCaml qui lui est passé. Il peut interpréter des fichiers passés sur la ligne de commande ou bien se comporter comme un shell et interpréter les phrases que l'utilisateur saisit. Voir le manuel

UTop est un interprète amélioré, avec édition de ligne, complétion, couleurs, ...

Try OCaml est un interprète OCaml compilé vers Javascript pour une exécution dans un navigateur web.

3. Profilage et débogage

La distribution OCaml fournit un débogueur, ocamldebug, permettant de suivre l'exécution d'un programme pas à pas, de revenir en arrière, d'inspecter des valeurs, mettre des points d'arrêt. Le programme doit être compilé en code-octet avec l'option -g. Voir le manuel

La distribution inclut également un profileur, ocamlprof, capable d'afficher le nombre de passages à chaque point d'un programme compilé avec ocamlcp. Voir le manuel

On pourra également utiliser l'outil GNU gprof par exemple pour afficher le temps passé dans chaque fonction.

4. Pré-processeurs, extensions

Les outils de pre-processing permettent de définir des extensions de syntaxe du langage afin par exemple de simplifier l'écriture de certaines constructions répétitives, de générer automatiquement du code pour chaque déclaration de type (comme des fonctions de lecture/écriture), ...

Les compilateurs OCaml ont une option -pp permettant de spécifier une commande de pré-traitement du fichier source à compiler.

Historiquement, deux préprocesseurs ont fait partie de la distribution OCaml. Un premier outil nommé Camlp4 était inclus dans la distribution OCaml. Il a par la suite été remplacé par un nouveau Camlp4, qui a lui aussi été sorti de la distribution OCaml et développé séparément, notamment pour pouvoir sortir des versions plus souvent. Le premier Camlp4 s'appelle maintenant Camlp5 et est donc lui aussi développé séparément.

OCaml ≥ 4.01.0

Les compilateurs OCaml ont également une option -ppx permettant de spécifier un outil de modification de l'arbre de syntaxe abstraite. Une commande ainsi spécifiée est donc appelée après l'analyse syntaxique du fichier source et elle doit retourner un arbre syntaxique. Ce mode de fonctionnement vise à faciliter le développement d'extensions. De plus, il est possible de spécifier plusieurs commandes (avec plusieurs options -ppx) de façon à combiner les extensions (les pré-processeurs ainsi spécifiés sont appelés séquentiellement). Les préprocesseurs camlp* sont maintenant progressivement abandonnés au profit des ppx.

Des modules de la distribution OCaml offrent des facilités pour développer de tels pré-processeurs (Ast_mapper, Ast_helper). Le paquet ppx_tools contient des outils et extensions ppx pour écrire des extensions ppx.

OCaml ≥ 4.01.0
OCaml ≥ 4.02.0

En plus de l'option -ppx, le langage a été enrichi par la possibilité de définir des "points d'extension" (extension points ou extension nodes) Voir le manuel. Il s'agit d'une syntaxe utilisable à peu près partout en lieu et place d'une expression, d'un filtre, d'une définition de module, ... Il revient aux pré-processeurs ppx de transformer ces points d'extensions en construction OCaml "normales" (sinon le compilateur OCaml termine en erreur, aucune sémantique n'étant associée à ces points d'extension). On pourra lire ce billet (en anglais) pour un exemple complet.

OCaml ≥ 4.02.0
5. Documentation

L'outil ocamldoc (ou ocamldoc.opt pour la version en code natif) inclus dans la distribution est l'équivalent de javadoc ou doxygen pour OCaml. Il permet de générer une documentation de référence en utilisant des commentaires formattés. Voir le manuel

Ces commentaires sont des commentaires OCaml habituels, sauf qu'ils commencent par (** au lieu de (*. Ils se terminent comme les commentaires normaux par *). Le principe général est de placer un commentaire spécial juste au-dessus ou en-dessous de l'élément (valeur, type, module, ...) commenté.

OCamldoc permet de générer des documentations aux formats \LaTeX, HTML, Texinfo, pages man. Il est également possible de définir son propre générateur et d'ajouter des éléments de syntaxe pour générer des documentations spécialisées.

6. Edition de code

Avec le temps, plusieurs solutions d'édition de code OCaml ont vu le jour:

Le mode Emacs standard
Un mode Emacs offrant la coloration syntaxique, l'indentation et l'accès aux commandes de compilation, l'affichage des annotations de type, ...
Tuareg
Un autre mode Emacs.
Merlin
Outil fournissant une fonctionnalité de complétion qu'il est possible d'interroger depuis son éditeur préféré. Fournit également le support pour Emacs et Vim.
Sublime-better-ocaml
Un mode OCaml alternatif pour Sublime Text.
Typerex
Une suite d'outils offrant des fonctionnalités avancées (refactoring, navigation, ...) avec des commandes emacs.
OCaml-top
Un éditeur dédié à l'apprentissage d'OCaml.
Chamo
Une sorte d'Emacs développé en OCaml (par l'auteur de ces lignes).
OCaml editor
Un environnement de développement intégré pour OCaml.
Try OCaml
Une application web pour essayer OCaml en ligne.
7. Gestionnaire de paquets, installation

Le gestionnaire de paquets de la communauté est Opam. Il gère les dépendances et les recompilations nécessaires lors de l'installation d'un nouveau paquet, permet d'avoir plusieurs versions d'OCaml installées, ...

L'outil topkg permet, à partir d'une description, de construire un paquet Opam pour compiler et installer un logiciel.

8. Analyse syntaxique

Comme yacc et lex pour C, les outils ocamlyacc et ocamllex, inclus dans la distribution OCaml sont des générateurs d'analyseurs respectivement grammaticaux (parsers) et lexicaux (lexers). Le manuel OCaml donne un exemple concret de leur utilisation. Voir le manuel

Il existe d'autres outils d'analyse syntaxique:

Menhir
Un générateur d'analyseurs grammaticaux comme ocamlyacc (avec une syntaxe similaire) mais avec des fonctionnalités supplémentaires (règles paramétrées, conflits mieux expliqués, possibilité de séparer les spécifications en plusieurs fichiers pour introduire de la modularité, ...).
Sedlex
Un générateur d'analyseurs lexicaux (comme ocamllex) supportant l'Unicode.

On pourra rechercher d'autres outils et bibliothèques ailleurs:

Awesome OCaml
Cette page liste des ressources (outils, bibliothèques, documentations, ...) par domaine.
Opam packages
La liste des paquets disponibles dans Opam, avec un moteur de recherche.

Il n'y a pas de manière unique d'organiser le développement d'un logiciel en OCaml. Chacun est libre d'organiser ses développements avec les outils de son choix, l'arborescence de fichiers qui lui convient, etc.

On liste ici quelques lectures dont chacun pourra s'inspirer: