Premiers pas¶
Trois façons de s'en servir, de la plus simple à la plus impliquée.
1. Dans votre navigateur¶
Ouvrez le bac à sable. Rien à installer, aucune inscription.
Choisissez un programme dans la liste déroulante, ou tapez le vôtre, et appuyez sur Ctrl ou ⌘ + Entrée. Les cinq onglets de droite montrent ce qu'il affiche, les types inférés, les portées, le Python produit, et votre source réimprimé.
Tout se passe dans la page. Votre code n'est envoyé nulle part, et une fois la page chargée il fonctionne hors ligne. Le bouton Copier le lien met votre programme dans l'URL, ce qui permet de l'envoyer à quelqu'un.
2. Sur votre machine¶
Il vous faut Python 3.11 ou plus récent et uv, qui s'installe en une commande :
Ensuite :
git clone https://github.com/abilian/astero
cd astero/examples/ocaml
uv run python -m ocaml corpus/fact.ml
Cela doit afficher 120 trois fois : corpus/fact.ml calcule une factorielle de trois manières différentes.
uv run construit l'environnement la première fois et le réutilise ensuite. Il n'y a rien d'autre à configurer, parce que le compilateur est du Python pur, sans aucune dépendance.
Les cinq vues, en ligne de commande¶
Chaque onglet du bac à sable est une option :
python -m ocaml programme.ml # l'exécuter
python -m ocaml --types programme.ml # les types inférés
python -m ocaml --names programme.ml # les portées
python -m ocaml --python programme.ml # le Python produit
python -m ocaml --printed programme.ml # votre source, réimprimé
Essayez sur un programme que vous connaissez :
$ python -m ocaml --types corpus/tree.ml
val insert : 'a -> 'a tree -> 'a tree
val height : 'a tree -> int
val min_elt : 'a tree -> 'a
val to_list : 'a tree -> 'a list
val summarise : int list -> stats
Rien dans corpus/tree.ml ne dit de quel type est quoi que ce soit. Tout cela a été déterminé.
Votre propre bac à sable¶
Pour faire tourner le bac à sable depuis votre copie :
Puis ouvrez http://localhost:8000/. Cela construit le paquet et lance un petit serveur web ; Ctrl+C pour l'arrêter.
3. Depuis Python¶
Le compilateur est un paquet Python ordinaire : vous pouvez appeler les morceaux directement.
from ocaml.front.parser import parse
from ocaml.middle.infer import signature
from ocaml.back.interpret import run_source
from ocaml.back.compile import compile_source
source = "let rec fact n = if n <= 1 then 1 else n * fact (n - 1)"
signature(parse(source)) # ['val fact : int -> int']
compile_source(source) # le Python produit, sous forme de chaîne
run_source(source) # l'exécute, et rend la portée globale
ocaml.pipeline.analyse(source) fait tourner toutes les étapes d'un coup et rend ce que chacune a produit. La ligne de commande et le bac à sable sont tous les deux construits dessus, donc tout ce que l'un ou l'autre affiche est accessible depuis Python.
Les programmes d'exemple¶
corpus/ contient dix-huit programmes, à lire avant d'écrire les vôtres. Huit d'entre eux correspondent à un chapitre chacun d'un cours type :
sorting.ml |
les tris : insertion, sélection, fusion, pivot |
stacks.ml |
piles et files, la file amortie sur deux piles |
divide.ml |
diviser pour régner : Euclide, exponentiation rapide, dichotomie |
dynamic.ml |
programmation dynamique : mémoïsation, somme maximale, plus longue sous-suite commune |
assoc.ml |
dictionnaires, en listes d'association |
polynomes.ml |
polynômes : Horner, somme, produit, dérivée |
combinatoire.ml |
Hanoï, parties, permutations, code de Gray |
graphes.ml |
parcours en profondeur et en largeur |
Chacun est accompagné d'un fichier .expected, qui est exactement ce qu'il affiche, et d'un fichier .signature, qui est le type de chaque définition. Ce ne sont pas des décorations : c'est ce à quoi la suite de tests compare, à chaque modification.
Ensuite¶
- La visite guidée du langage, si vous voulez commencer à écrire.
- Le bac à sable, pour tirer parti des cinq vues.
- Comment marche le compilateur, si c'est pour cela que vous êtes venu.