Langages fonctionnels: ce qu'ils sont, où ils vont

Même si certains prétendent exactement ce que c'est, la programmation fonctionnelle continue d'attirer les développeurs. Et trois des langages fonctionnels les plus populaires - Clojure, F # et Scala - sont sur le point d'être améliorés.

La programmation fonctionnelle a un attrait essentiel pour certains développeurs, déclare le fondateur de Scala, Martin Odersky: "Les programmeurs de ce segment aiment la programmation fonctionnelle parce qu'elle rend le code plus clair, mieux structuré et empêche de nombreuses classes d'erreurs." Mais certains soutiennent que la programmation fonctionnelle conduit à des logiciels moins efficaces.

La programmation fonctionnelle nécessite également de réfléchir à la programmation d'une nouvelle manière, déclare David Stephens, responsable de programme de Microsoft pour .Net et porte-parole de F #. Les abstractions peuvent être un problème: "Lorsque vous rendez le code plus abstrait, lorsque vous vous éloignez de la manipulation de bits et que vous passez explicitement par des boucles, cela peut prendre plus de temps pour comprendre ces abstractions."

Qu'est-ce qu'un langage fonctionnel, exactement?

Dans ses termes les plus élémentaires, la programmation fonctionnelle consiste à traiter le calcul comme des fonctions mathématiques. En plus des langages considérés comme fonctionnels dès le départ, Java et C # sont devenus plus fonctionnels en ajoutant la prise en charge des expressions lambda.

Mais une définition précise de la programmation fonctionnelle peut être difficile à cerner. Le blog Clojurefun cite plusieurs définitions qu'il estime incorrectes, notamment la définition de la programmation fonctionnelle comme permettant un style fonctionnel avec des fonctions d'ordre supérieur ou un langage prenant en charge les lambdas. Il dit que la définition correcte est un langage mettant l'accent sur les fonctions et les données immuables.

Mais la définition préférée du blog Clojure n'est pas nécessairement correcte, disent d'autres. "L'auteur en choisit un, qui convient d'ailleurs le mieux à Clojure - pas étonnant, c'est un blog Clojure", déclare Odersky de Scala. "J'ai une interprétation qui est proche de la sienne, mais pas la même."

Une fonction, dit Odersky, est un morceau de code qui mappe les entrées aux sorties et n'a aucun autre effet au-delà de cela. «C'est la définition mathématique de la fonction que nous utilisons ici. Parfois, ces fonctions sont appelées« pures », pour les distinguer, disons, des fonctions en C.» Un langage fonctionnel se concentre sur la programmation avec des fonctions pures, ce qui le rend facile et puissant, explique Odersky, fondateur de Typesafe, le fournisseur de la plate-forme de développement d'applications JVM Typesafe.

La programmation fonctionnelle peut être combinée avec d'autres paradigmes, note-t-il. "Par exemple, fonctionnel va très bien avec orienté objet. Scala est un langage fonctionnel dans ce sens. Je suis d'accord que le simple fait d'avoir des lambdas ne rend pas un langage fonctionnel; c'est nécessaire mais pas suffisant."

Le développeur de Clojure Rich Hickey, qui est également CTO chez le développeur de systèmes Cognitect, est d'accord avec une affirmation principale du blog Clojure. «L'article souligne à juste titre que les fonctions de première classe ou d'ordre supérieur ne sont pas ce qu'est la programmation fonctionnelle. La programmation fonctionnelle consiste à rendre la programmation plus proche des mathématiques», dit-il. Cela dit, il reste encore un spectre de définitions pour la programmation fonctionnelle, dit Hickey.

Stephens de Microsoft voit les capacités fonctionnelles s'étendre au-delà des seuls langages. «Le langage de programmation fonctionnel le plus populaire au monde est Excel», dit-il. Une simple feuille de calcul Excel peut contenir une colonne contenant un ensemble de valeurs, telles que A1 X 2. "C'est une fonction pure sur A1 et A1 ne change pas, vous calculez donc des valeurs à partir de ces données existantes."

La technologie Linq (Language-Integrated Query) de Microsoft fournit également une programmation fonctionnelle, dit-il. «Presque tous les langages de programmation adoptent désormais les fonctionnalités des langages fonctionnels.

Stephens cite les données immuables comme essentielles à la programmation fonctionnelle. La concurrence - des programmes avec plusieurs threads fonctionnant simultanément sur des données - bénéficie également de données immuables, note-t-il. "Nous appelons [F #] une première langue fonctionnelle parce qu'elle provient d'un héritage d'autres langues." Il prend également en charge la programmation orientée objet et fonctionne avec C # et Visual Basic, dit-il.

Clojure's Hickey voit l'adoption de langages fonctionnels comme une réponse à la pression croissante des développeurs, qui doivent affronter de plus gros problèmes de nos jours. «Pour ce faire, ils doivent réduire la complexité accidentelle de leurs programmes. Il est maintenant largement reconnu que l'état omniprésent et les effets secondaires sont une source principale de complexité et de bogues dans les programmes», dit Hickey. "Bien qu'il soit possible de réduire la quantité d'état dans les programmes écrits dans des langages non fonctionnels, il est considérablement plus facile et plus rapide de le faire dans un langage qui rend la programmation fonctionnelle idiomatique et par défaut."

Quelle est la prochaine étape pour les trois principaux langages fonctionnels

Scala, 13 ans, est l'un des principaux langages de la science des données, déclare le fondateur de Scala, Odersky. Pris en charge sur la JVM, il compte entre 400 000 et 500 000 utilisateurs. Les plans à court terme exigent qu'il soit optimisé pour Java 8, dans lequel les instructions de bytecode de la dernière mise à jour standard de Java permettraient à Scala de générer un code plus efficace.

À plus long terme, Scala obtiendra un système de type nettoyé, des macros plus sûres et plus de support de plate-forme, avec un back-end de compilateur LLVM à l'étude. D'autres améliorations sont prévues pour améliorer la convivialité de Scala.js, pour la compilation de Scala en JavaScript.

Clojure, âgé de neuf ans, également basé sur la JVM, a été utilisé dans la finance, la vente au détail, les logiciels et le divertissement, explique Hickey. "Il a été appliqué dans divers domaines d'application tels que le traitement et l'analyse des transactions, le big data, les opérations réseau, l'analyse prédictive, la recherche, la sécurité et les offres grand public."

F #, âgé de 11 ans, a été fondé par Microsoft Research par Don Syme et est supervisé par la Fondation F #. Il est utilisé dans un large éventail d'applications et fonctionne sous Linux, OS X, Android, iOS, Windows et les navigateurs. «Ce sur quoi nous travaillons actuellement, c'est le faire fonctionner avec .Net Core,» une version modulaire open source et multiplateforme du .Net Framework, dit Stephens. L'interpolation de chaîne, facilitant l'écriture de chaînes, est sur la planche à dessin.