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.