Programmation ML Introduction

Un livre de Wikibooks.

<< Retour au sommaire

ML (contraction de Meta Language) est un langage de programmation généraliste fonctionnel développé par Robin Milner et d'autres personnes dans les années 1980 à l'Université d'Edimbourg, pour le système de preuves formelles LCF. R. Milner rencontrait des difficultés avec le système de typage de LISP qui permettait de "prouver" des assertions fausses. ML est un langage fonctionnel impur, signifiant par là qu'il est possible de programmer en impératif, et que par conséquent, peut être sujet à des effets de bord, contrairement à des langages purement fonctionnels comme Haskell.

ML a été standardisé en 1983, puis révisé en 1997, le langage résultant s'appelant SML (Standard ML).

Les fonctionnalités de ML incluent :


  • une gestion de mémoire automatique par un ramasse-miettes,
  • un typage statique fort et polymorphique : le transtypage (cast en C) est strictement interdit, ce qui supprime un grand nombre de bogues possibles. Le polymorphisme offert par le langage permet de définir précisément les types et les opérations autorisées sur les types et les structures de données. Le polymorphisme de fonction autorise les fonctions à agir sur divers types ou structures.
  • l'inférence de types : il n'est nullement nécessaire de déclarer les variables. Le compilateur est capable de détecter leur type de façon non ambiguë grâce au contexte d'utilisation. Cela rend le code plus succinct et améliore la lisibilité.
  • des type de données algébriques : on peut définir de nouvelles structures de données et les combiner de façon hiérarchique.
  • le pattern matching est la possibilité de décomposer un type de donnée algébrique en ses différents sous-types et de proposer un branchement pour chacun de ces sous-types. Ce processus est comparable à l'identification de type à l'exécution dans d'autres langages. Cependant, le pattern matching effectue une résolution statique, et ne pénalise pas les performances à l'éxecution.
  • un système de modules paramétrés (appelés structures) et d'interfaces (appelées signatures) puissant : une structure peut avoir plusieurs signatures, et vice-versa. Le paramétrage est similaire aux "templates" de C++ ou aux "generic" d'Ada ou de Modula-3, à la différence près que le typage est complètement vérifié à la compilation.
  • un système de gestion d'exceptions.

D'autres avantages du ML sont une grande sûreté (un programme qui compile ne peut pas "planter"), une syntaxe compacte qui s'inspire de la notation mathématique, tout en restant lisible, et une rapidité d'exécution souvent comparable à C++.

Les points forts de ML le rendent particulièrement apte à l'écriture de langages, de compilateurs et de systèmes de preuve formelle.