Skip to content

caml-prépa

Un compilateur pour l'OCaml de prépa, que l'on peut regarder fonctionner.

Ouvrir le bac à sable Commencer ici


De quoi s'agit-il ?

C'est un vrai compilateur pour le sous-ensemble d'OCaml enseigné en classes préparatoires : let rec, filtrage, listes, tableaux, enregistrements, types sommes, références, boucles, exceptions.

Vous pouvez écrire un programme dans votre navigateur et l'exécuter. Jusque-là, rien d'extraordinaire : beaucoup de sites le font.

Ce qui change, c'est qu'il vous montre son travail. Tapez un programme, et il vous dit, pour le même code, en même temps :

  • ce qu'il affiche
  • quel type il a inféré pour chaque définition, sans qu'on le lui dise
  • à quelle définition renvoie chaque nom, sous forme d'arbre de portées
  • en quel Python il le compile
  • comment il a lu ce que vous avez écrit, réimprimé

Un compilateur, d'ordinaire, est une boîte noire : le source entre, un résultat sort, et avec un peu de chance un message d'erreur. Celui-ci vous laisse regarder à l'intérieur pendant qu'il travaille.

Qu'est-ce que j'y gagne ?

Si vous apprenez OCaml, les deux choses sur lesquelles tout le monde bute sont les types et les portées, et ici vous les voyez directement plutôt qu'à travers un message d'erreur.

Vous avez écrit une fonction et OCaml lui donne un type auquel vous ne vous attendiez pas ? Demandez quel type il a inféré, et pour quelle sous-expression. Vous ne savez plus à quel x renvoie le x de la ligne 12 ? L'arbre des portées le dit :

module    top              {somme}
  binding                    {l}
    case                       {}
    case                       {q, t}

Autrement dit : le fichier définit somme, et l existe à l'intérieur. q et t existent dans le second cas du filtrage, et là seulement. Plus besoin de deviner.

Si vous êtes curieux de savoir comment marche un compilateur, celui-ci est assez petit pour se lire en une après-midi : environ 3 500 lignes de Python, organisées selon les trois parties que nomme n'importe quel cours de compilation. Un front-end qui transforme le texte en arbre, un middle-end qui détermine ce que l'arbre veut dire, et un back-end qui l'exécute. Le second tutoriel les parcourt toutes les trois en suivant un petit programme.

Si vous savez lire du Python, vous savez lire ce compilateur.

Si vous voulez simplement essayer OCaml sans rien installer, le bac à sable ne demande ni compte, ni installation, ni réseau une fois chargé. Rien de ce que vous tapez ne quitte votre navigateur.

Ce que ce n'est pas

Ce n'est pas OCaml. C'est un compilateur pédagogique pour un sous-ensemble pédagogique, et il le dit là où il diffère. int est ici non borné, alors qu'il fait 63 bits dans le vrai. Il n'y a pas encore de Printf, et une récursion très profonde épuisera la pile là où OCaml tiendrait. L'aide-mémoire en donne la liste complète.

Ce n'est pas non plus un éditeur. Pas de complétion, pas de coloration, pas de soulignement rouge sous vos fautes. C'est une zone de texte et cinq réponses.

Si vous voulez le vrai OCaml pour vos TP, installez-le ; celui-ci sert à voir comment la chose fonctionne.

Par où commencer


caml-prépa est un exemple complet construit sur astero, une bibliothèque qui dérive d'une déclaration la façon dont un compilateur traite les noms. Le code est libre, sous licence Apache-2.0.