
Je serais plutôt de l'avis de Gautier et pense que la caractérisation de
Stéphane est un peu réductrice.
En pratique je trouve qu'un langage semble fonctionnel dès qu'il inclut des
mécanismes pour manipuler des fonctions comme citoyens de première classe
(valeurs fonctionelles, création de fonctions anonymes, fonctions d'ordre
supérieur).
C'est très général mais en première approximation, cela capture ce que
j'attends de tout langage qui se dit fonctionnel.
Il y a beaucoup de fonctionnalités qui sont souvent attachées aux langages
fonctionnels, mais que je ne considère pas nécessairement clés (types de
données algébriques, pureté, typage statique/dynamique ou non-typage,
portée statique/dynamique, ...).
- Valentin
2014-03-21 7:06 GMT-07:00 Gautier DI FOLCO
Le 21 mars 2014 13:15, Stéphane Payrard
a écrit : Etant autodidacte, je n'ai pas d'autorité particulière pour parler
d'un sujet d'origine académique. :) De plus ma réponse est biaisée par mon intérêt pour les langages elm et idris .
La programmation fonctionnelle moderne tourne autour de deux thèmes, celui de la référence transparentielle et celui de type.
Le premier est déjà mentionné implicitement sans indiquer le bénéfice espéré : l'absence d'états permettrait aux compilateur de paralléliser et d'utiliser au mieux les architectures multiprocesseurs. En pratique, sauf dans des cas spécialisés (grosses matrices, rendu graphique), ce bénéfice ne s'est guère matérialisé. Pourtant, c'est cette perspective qui a motivé le développement des langages fonctionnels pour résoudre le goulot d'étranglement de l'architecture de Von Neumann. Voir le papier de Backus en 1977 :
https://www.cs.ucf.edu/~dcm/Teaching/COT4810-Fall%202012/Literature/Backus.p...
La notion de type permet pour les langages les moins "riches" (polymorphiques de niveau 1) d'offrir l'inférence de type. Tandis des langages langages comme idris proposent des types paramétrés par des valeurs ce qui permet un système plus riche mais oblige à beaucoup d'annotations de type. C'est pourquoi ces langages étaient jusqu'à maintenant spécialisés dans des domaines comme la création de prevues formels. Le domaine est encore revitalisé par la découverte des similarités entre un champ de la topologie et la théorie des types. Mais je ne sais pas si (ou quand) cela aura un impact en dehors des milieux académiques. Voir http://homotopytypetheory.org/
Il est intéressant de noter que la syntaxe de beaucoup de langages fonctionnels est héritée d'ISWIM, un langage hypothétique présenté par Landin dans un papier de 1966. http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf
Finalement, un sujet connexe est la programmation réactive fonctionnelle. Un des intérêts est de permettre le type de programmation interactive prônée par Bret Victor mais probablement impossible dans tout autre contexte. Bret Victor semble délibérément ignorer cette contrainte en proposant des démos qui la cachent. Dans ce domaine un langage est particulièrement prometteur : elm. La société Prezi entend utiliser elm pour les prochaines versions de son produit et a embauché le créateur du langage, ce qui pourrait garantir sa pérennité. Même si la programmation réactive fonctionnelle est un sous champ de la programmation fonctionnelle, un programme généré par elm a le mérite de tourner dans un browser et de permettre des démos interactives ce qui rend le sujet moins aride.
http://elm-lang.org/blog/Interactive-Programming.elm http://worrydream.com/LearnableProgramming/
On 3/21/14, Laurent Pierron
wrote: Bonjour,
Récemment je me suis posé la question avec un collègue pour introduire un séminaire interne sur les langages fonctionnels, et on n'a pas réussi à trouver une réponse satisfaisante, on s'est heurté aux différents types de langage fonctionnel (Lisp, ML famille, Haskell, etc.), qui peuvent inclure des éléments de langages impératifs, des objets, des types algébriques ou uniquement des types simples et qui ont des stratégies d'évaluation différentes.
Personnellement, je dirais que dans un langage de fonctionnel l'exécution d'un programme se fait uniquement par substitution d'expression sans modification de l'état d'une machine alors que dans un langage impératif l'exécution se fait par évaluation d'expression et modification de l'état de la machine.
On peut aussi dire que les langages fonctionnels sont basés sur le lambda-calcul de Church, alors que les langages impératifs sont basés sur la machine de Turing, mais il faut expliquer ce qu'est le lambda-calcul.
Laurent Pierron
Le 20 mars 2014 à 11:26, Gautier DI FOLCO
a écrit : Bonjour,
Je vais peut-être poser une question très générale, mais qu'est-ce qui caractérise un langage de programmation fonctionnel ? Je m'explique : - je sais qu'un LPF se base sur des expressions - je sais en reconnaître un quand j'en vois un
mais chaque fois qu'on me pose la question, je ne suis pas foutu de donner des éléments caractéristiques clairs.
Est-ce que vous auriez une "phrase toute faite" ou quelque chose qui me permette de l'expliquer simplement/clairement de manière juste ?
Merci par avance. _______________________________________________ Haskell-fr mailing list Haskell-fr@haskell.org http://www.haskell.org/mailman/listinfo/haskell-fr
_______________________________________________ Haskell-fr mailing list Haskell-fr@haskell.org http://www.haskell.org/mailman/listinfo/haskell-fr
-- cognominal stef _______________________________________________ Haskell-fr mailing list Haskell-fr@haskell.org http://www.haskell.org/mailman/listinfo/haskell-fr
Je suis un peu dans le même cas, mais comme dans mes cercles je suis "le plus calé en FP" et qu'en plus je tente "d’évangéliser", j'ai de gros efforts pédagogiques à fournir (ce qui n'est pas mon point fort). Le soucis avec ces critères, transparence référentielle et typage fort/statique, c'est que du coup tu sors Scala et Clojure par exemple.
PS : je suis sur du Data-flow en ce moment du coup je connais un peu le FRP, mais j'avoue ne pas avoir fait le lien avec Bret Victor.
_______________________________________________ Haskell-fr mailing list Haskell-fr@haskell.org http://www.haskell.org/mailman/listinfo/haskell-fr