Ci-dessous figurent différents outils, bibliothèques, extensions, ..., concernant l'environnement de développement OCaml.
La distribution d'OCaml fournit différents outils destinés à la compilation:
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:
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.
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.
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.
La distribution inclut également un profileur, ocamlprof, capable d'afficher le nombre de passages à chaque point d'un programme compilé avec ocamlcp.
On pourra également utiliser l'outil GNU gprof par exemple pour afficher le temps passé dans chaque fonction.
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.
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.
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) . 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.
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.
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 , 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.
Avec le temps, plusieurs solutions d'édition de code OCaml ont vu le jour:
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.
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.
Il existe d'autres outils d'analyse syntaxique:
On pourra rechercher d'autres outils et bibliothèques ailleurs:
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: