TUTORIELS 
Caractéristiques des langages fonctionnels

Page 1 | 2

Déroutante peut-être, la programmation fonctionnelle est pourtant au coeur de langages comme le Lisp, CAML ou Erlang.

 (5 septembre 2003)
 

Monades
Si le simple fait d'afficher des données à l'écran ou encore de les écrire dans un fichier est considéré comme effet de bord, comment s'acquitter de ce type de taches avec un langage fonctionnel ? C'est là qu'interviennent les monades, un concept abstrait qui exprime la composition séquentielle, c'est à dire la capacité à ordonner les fonctions en séquences. Il existe ainsi des monades d'entrée/sorties, de gestion d'exceptions... Ces monades permettent de transmettre l'état de l'environnement d'une fonction à l'autre de la séquence.

D'un point de vue "déclaratif", l'interdiction des effets de bord combinée à la présence de monades (qui sont plus ou moins des fonctions "impératives") permet la séparation franche et nette entre les fonctions "pures", sans effet de bord, et les fonctions "impures", qui font appel aux effets de bord pour une action très spécifique. En quelque sorte, les monades masquent les effets de bord et permettent de séparer le monde des valeurs (qui n'ont pas d'effet de bord) de celui des calculs (qui peuvent en avoir) : ce système est donc une manière beaucoup plus propre de faire ce que fait la programmation impérative.

Paresse
L'évaluation non-stricte d'une expression (lazy evaluation) - celle-ci n'est pas évaluée dès qu'une variable lui est envoyée, mais uniquement lorsque le résultat de l'évaluation est nécessaire au bon déroulement du programme, auquel cas le résultat est stocké au cas où il serait utile pour une autre fonction - permet en outre, en programmation fonctionnelle, de se dispenser des calculs inutiles... "L'évaluation paresseuse" n'est évidemment pas compatible avec les effets de bord : si une fonction n'est pas évaluée, son effet de bord, nécessaire à une autre fonction, ne se produirait pas.

Quelques exemples
Comme nous l'avons vu, il existe des langages fonctionnels purs et des langages fonctionnels impurs, la différence étant qu'un langage impur autorise certains aspects de la programmation impérative (effets de bord...) et donc que le concept de "programme paresseux" n'est pas vraiment applicable...

Langages purs :
Miranda : le premier langage fonctionnel conçu dans le but de développer des applications commerciales plutôt dans un but de recherche.
Haskell : l'un des derniers-nés de la famille, et probablement le mieux vu par la communauté.
Erlang : Open Source après avoir été créé par Ericsson, il a la spécificité d'être utilisé dans de gros projets industriels.

Langages impurs :
Lisp : l'ancêtre, apparu dans les années 50. Son nom vient du fait qu'il était spécialisé dans le traitement de listes (LISt Processor), à une époque où l'on se préoccupait surtout du calcul numérique. Il est depuis devenu un incontournable de la Recherche, notamment en intelligence artificielle.
Scheme : une évolution de Lisp prônant la simplicité et "l'élégance conceptuelle". C'est le langage de script de GIMP.
ML : (Meta-Langage) décrit une famille de langages fonctionnels, dont Standard ML, Lazy ML, CAML, OCaml et autres...

Pour qui ?
La plupart des développeurs n'auront jamais à se soucier de langages autres qu'impératifs au cours de leur carrière, aussi l'intérêt d'étudier les autres types de langages peut leur sembler extrêmement limité. Pourtant, plus qu'une simple entrée supplémentaire sur un CV, la connaissance de la programmation fonctionnelle ouvre à d'autres manières, peut-être plus efficaces ou plus appropriées dans le cadre d'un projet donné, de résoudre un problème posé, introduit des concepts et des solutions vraiment indépendantes du langage, facilite la compréhension de la relation entre algorithme et programme, et surout augmente la palette des choix d'outils à disposition...
Pour les habitués de "l'impératif", l'apprentissage d'un langage fonctionnel peut être tendu et long, mais quand le déclic se fera entendre, cette formation, de notre point de vue, vaudra la chandelle.

Page 1 | 2

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page