Backend Racket
J'ai ajouté un nouvel Ast : un AST fonctionnel. Cet Ast permet d'écrire des programmes fonctionnels, il ne contient que des expressions (donc pas d'instruction) et ne contient pas d'affectation sur les variables (les seules affectations sont sur les tableaux et les records). Cet Ast se trouve dans le dossier Astfun, la passe qui permet de convertir un ast impératif en ast fonctionnel se trouve dans le fichier transform.ml.
Pour tester cet Ast, j'ai codé deux printers : un pour ocaml (le langage que je connais le mieux, donc pour un prototype, ça passait bien). Ce backend produit du code plus long que le backend ocaml impératif, mais il ne contient ni référence ni exception pour les returns mal placés, ce qui fait que les deux Asts ont un intéret. Le second printer permet de générer du scheme, plus exactement du racket. L'abondance de letin place ce langage dans le top des langages les plus verbeux. On constate donc que générer du code fonctionnel à partir de code impératif ne produit pas du code aussi idiomatique qu'on aurait pu croire.
Bref, nous avons donc deux nouveaux printers : un qui génère du caml dans un style fonctionnel, et l'autre qui ajoute racket à la liste des langages que metalang gère.