Accueil🇫🇷Chercher

ML (langage)

ML (contraction de Meta Language) est un langage de programmation généraliste fonctionnel.

Histoire

ML fut initialement développé par Robin Milner et d'autres personnes dans les années 1970 à l'université d'Édimbourg, pour le système de preuves formelles Logic for Computable Functions (en) (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 : il est possible de programmer en impératif et, en conséquence, les fonctions peuvent être sujettes à des effets secondaires non désirés (dits « 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'appelle Standard ML (SML), et a été notamment implémenté dans Standard ML of New Jersey (SML/NJ). En parallèle, des équipes françaises ont développé Caml, dont la popularité dans la communauté ML internationale est maintenant très grande.

Le typage de ML a été étendu avec du polymorphisme de première classe présent dans le système F de Jean-Yves Girard grâce à la thèse de Didier Le Botlan et à Didier Rémy au début des années 2000[1]. On parle alors de MLF. Cette extension du typage était un problème posé depuis 1980. Aujourd'hui, ce langage est de plus en plus simplifié.

Fonctionnalités

Les fonctionnalités de ML incluent :

  • une gestion de mĂ©moire automatique, gĂ©nĂ©ralement par un ramasse-miettes ;
  • un typage statique fort et polymorphe : le transtypage (cast en C) implicite est strictement interdit, ce qui supprime un grand nombre de bogues possibles. Le système de types Ă©voluĂ© 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. Il est possible de dĂ©finir des fonctions gĂ©nĂ©riques et d'Ă©crire des fonctions qui prennent d'autres fonctions en paramètres (fonctions dites d'ordre supĂ©rieur). Ce système peut ĂŞtre vu comme une variante (plus expressive) de la gĂ©nĂ©ricitĂ© dans les langages impĂ©ratifs (C, COBOL, Pascal, etc.) ;
  • l'infĂ©rence de types : il n'est nullement nĂ©cessaire de dĂ©clarer le type des variables. Le compilateur est capable de le dĂ©tecter de façon non ambiguĂ« grâce au contexte d'utilisation. Cela rend le code plus succinct et amĂ©liore la lisibilitĂ© ;
  • des types de donnĂ©es algĂ©briques : on peut dĂ©finir de nouvelles structures de donnĂ©es et les combiner de façon hiĂ©rarchique ;
  • le filtrage par motif en anglais : pattern matching : c'est la possibilitĂ© de dĂ©composer un type de donnĂ©e algĂ©brique en ses diffĂ©rentes formes et de proposer un branchement pour chacune d'elles. Ce processus est plus ou moins comparable Ă  l'identification de type Ă  l'exĂ©cution dans d'autres langages mais est rĂ©solu statiquement en ML – et ne pĂ©nalise donc pas les performances Ă  l'exĂ©cution ;
  • un système puissant de modules (appelĂ©s : structures) et d'interfaces (appelĂ©es : signatures). Les structures peuvent ĂŞtre paramĂ©trĂ©es (on parle alors de foncteurs) et avoir plusieurs signatures, et vice-versa. Le paramĂ©trage Ă©voque les « templates » de C++ ou les « 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Ă© (well-typed programs can't go wrong ; en Français : les programmes bien typĂ©s ne peuvent pas planter - Avec un jeu de mots, "Well-typed" pouvant aussi signifier "bien tapĂ© [au clavier]") ;
  • une syntaxe compacte qui s'inspire de la notation mathĂ©matique, tout en restant lisible ;
  • une rapiditĂ© d'exĂ©cution souvent comparable Ă  C++, surtout dans la version OCaml.

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

Implémentations

Les principales implémentations sont le Standard ML et OCaml.

Standard ML :

  • SML of New Jersey (Bell Laboratories, Princeton University, Yale University, AT&T Research)
  • Moscow ML
  • MLton (NEC Research Labs) : un compilateur optimisant extrĂŞmement robuste et efficace
  • Poly/ML
  • Concurrent ML

OCaml (INRIA) ne suit pas le standard SML mais est plutôt une évolution orientée objet de ML. Ce langage se caractérise par un compilateur produisant des programmes disposant d'une très grande rapidité d'exécution ainsi qu'une bibliothèque importante. Les développeurs et les utilisateurs forment une communauté très active pour un langage issu de la recherche. OCaml a servi de base pour le développement du langage F# sur la plate-forme .NET de Microsoft.

Notes et références

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.