TUTORIEL OUTILS 
7 familles de langages fonctionnels à la loupe
Lisp, Haskell, Erlang, Dylan... Notre sélection des langages de programmation reposant avant tout sur l'évaluation d'expressions. (22/11/2005)
La définition la plus acceptée d'un langage fonctionnel ? Un langage qui repose sur l'évaluation d'expressions, plutôt que l'exécution de commandes (langage impératif). Cette définition étant cependant sujette à débat, il est difficile de compartimenter ces langages.

Néanmoins, on peut dire qu'ils sont principalement répartis en deux catégories : les langages stricts ou "gloutons" (eager), et les langages non stricts ou "paresseux" (lazy). Ce classement se base sur la façon dont un langage réalise des évaluations.

Un langage strict évaluera tous les arguments d'une fonction, avant d'évaluer la fonction elle-même. De son côté, un langage paresseux n'évaluera que les arguments nécessaires à l'évaluation de la fonction. Le traitement de cette seconde méthode prend plus de temps, mais l'approche facilite grandement la programmation.

Un autre critère de discernement est la "pureté" d'un langage : il existe les langages purement fonctionnels, et les autres... Un langage "impur" autorise localement l'utilisation d'effets de bords, par le biais de techniques de programmation impérative.

7 familles de langages fonctionnels
Langage
Dérivés directs
(année de création)
Strict
Pur
Concurrent ou séquentiel
Commentaire
Lisp
Common Lisp, Scheme, Dylan
(1958)
Séquentiel
L'un des tous premiers langages de programmation de haut niveau, il est à l'origine de nombreux autres langages.
ML
Standard ML, Caml, OCaml
(fin des années 70)
Séquentiel
Un autre ancètre des langages de programmation, dont l'influence se fait toujours ressentir.
Miranda
(1985)
Séquentiel
Haskell
(1987)
Séquentiel
Considéré à l'heure actuelle comme LE langage fonctionel.
Clean
(1987)
Concurrent
Erlang
(1989)
Concurrent
Développé en interne par Ericsson, puis passé en Open-Source en 1998.
Oz
(1995)
Concurrent
Langage
Dérivés directs
(année de création)
Strict
Pur
Concurrent ou séquentiel
Commentaire

Ajoutons que les notions de concurrence/parallélisme et de séquentialité entrent fortement en compte dès qu'il s'agit d'un langage fonctionnel. Le parallélisme (et le parallélisme simulé, appelé "concurrence") indique l'exécution de plus d'un processus à un moment donné. La séquentialité fait s'exécuter les tâches les unes après les autres.

Il est à noter que nombre des langages que nous présentons plus haut existent en version modifiée. Concurrent Haskell, par exemple, élimine l'aspect séquentiel du Haskell d'origine. Une autre extension possible est celle du parallélisme.

  Forum

Réagissez dans les forums de JDN Développeurs

Par ailleurs, certains langages comme Perl, Python, Ruby ou TCL peuvent être utilisés dans un style fonctionnel, étant donné qu'ils proposent des abstractions, des fonctions d'ordre supérieur (qui peuvent prendre d'autres fonctions pour argument), et d'autres caractéristiques des langages dits fonctionnels.
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages