[Haskell-fr] Caractérisation des langages fonctionnels

Stéphane Payrard cognominal at gmail.com
Fri Mar 21 12:15:22 UTC 2014


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.pdf


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 <Laurent.Pierron at inria.fr> 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 <gautier.difolco at gmail.com> 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-fr
>
> _______________________________________________
> Haskell-fr mailing list
> Haskell-fr at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-fr
>


-- 
cognominal stef


More information about the Haskell-fr mailing list