Author: Christian.Queinnec@lip6.fr

## Pour en savoir plus

Les principales conséquences de l'ajout des traits impératifs dans un langage fonctionnel sont :

- de fixer la stratégie d'évaluation (évaluation stricte);
- d'ajouter des contraintes d'implantation, en particulier pour le GC (voir chapitre 9);
- pour les langages typés statiquement, de complexifier leur système de types;
- d'offrir différents styles de programmation dans le même langage, permettant ainsi l'écriture dans le style approprié ou possiblement mixte d'algorithmes.

Ce dernier point est important en Objective CAML où l'on désire avoir le même polymorphisme paramétrique pour les fonctions écrites dans un style ou dans l'autre. Pour cela, certains programmes purement fonctionnels ne sont plus typables avec cet ajout. L'article de Wright ([Wri93]) explique les difficultés du polymorphisme dans les langages munis de traits impératifs. Objective CAML adopte la solution qu'il préconise. La classification des différents types de polymorphisme en présence de modification physique est bien décrite dans la thèse d'Emmanuel Engel ([Eng98]).
Ces conséquences rendent la tâche des programmeurs un peu plus ardue et l'apprentissage du langage un peu plus difficile, mais comme le langage est plus riche et surtout laisse le choix du style, le jeu en vaut la chandelle. Par exemple l'évaluation stricte est de règle, mais il est possible d'implanter les mécanismes de base pour l'évaluation paresseuse grâce au mélange des deux styles. La plupart des langages fonctionnels purs utilisent cette évaluation. Proches de ML on peut citer les langages Miranda, LazyML et Haskell. Les deux premiers sont utilisés à l'université (enseignement et recherche). Par contre, il existe des applications conséquentes écrites en Haskell. L'absence d'effets de bord contrôlables nécessite une abstraction supplémentaire pour les entrées-sorties, appelée monade. On peut lire les ouvrages sur Haskell ([Tho99]) pour approfondir le sujet. Les flots représentent bien ce mélange de style fonctionnel et impératif. Leur utilisation pour les analyses lexicale et syntaxique est détaillée au chapitre 11.