it-swarm-fr.com

Pourquoi l'enthousiasme actuel pour la programmation fonctionnelle?

J'entendais beaucoup d'enthousiasme sur les langues de programmation fonctionnelle récemment, en ce qui concerne Scala, Clojure et F #. J'ai récemment commencé à étudier Haskell pour apprendre le FP paradigm.

J'adore ça, c'est vraiment amusant et convient à mes mathématiques.

Mais cela va-t-il vraiment importer? Évidemment, ce n'est guère une nouvelle idée.

Voici mes questions:

  1. Qu'est-ce qui a contribué au récent FP enthousiasme? Est simplement ennuyé avec OO ou quelque chose a changé pour faire FP plus nécessaire qu'auparavant?
  2. Est-ce que cela indique un fichier FP = futur? Ou est-ce une FAD, comme des bases de données d'objet ORIENT ORIENT?

En d'autres termes, quelqu'un peut-il m'aider à comprendre où cela vient et où cela pourrait aller?

50
Eric Wilson

Monads est l'une des innovations majeures de FP qui a abouti à la "explosion" d'intérêt.

En janvier 1992, Philip Wadler a écrit un document appelé l'essence de la programmation fonctionnelle qui a introduit des monads dans la programmation fonctionnelle comme moyen de gérer l'IO.

Le problème majeur des langages de programmation fonctionnelle pure, paresseux et fonctionnelle était l'utilité dans le traitement de l'IO. C'est l'un des membres de la "équipe gênante" dans la programmation, car "la paresse et les effets secondaires sont, d'un point de vue pratique, incompatible. Si vous voulez utiliser un langage paresseux, il faut à peu près une langue purement fonctionnelle; Si vous souhaitez utiliser des effets secondaires, vous feriez mieux d'utiliser un langage strict. " Référence

Le problème avec IO avant que Monads était que le maintien de la pureté n'était pas possible pour des programmes qui ont été utiles pour quoi que ce soit. Par io, nous entendons tout ce qui concerne l'état de changement, y compris l'entrée et la production de Utilisateur ou environnement. Dans la programmation fonctionnelle pure, tout est immuable, pour permettre la paresse et la pureté (sans effets secondaires).

Comment les monades résoutont-elles le problème de l'IO? Eh bien, sans discuter trop de monades, ils prennent fondamentalement le "monde" (l'environnement d'exécution) comme entrée à la monade et produisent un nouveau "monde" comme sortie et le résultat: type IO = a = monde -> (a, monde).

FP est donc entré de plus en plus dans le courant dominant, car le plus gros problème, IO (et autres) a été résolu. L'intégration dans l'existence OO Langues a également Comme vous le savez, vous savez. Linq est des monades, par exemple, à travers et à travers.

Pour plus d'informations, je recommande de lire sur les monades et les papiers référencés dans ma réponse.

33

L'un des principaux problèmes lors de la programmation des langues traditionnelles telles que C, Java, C #, Assembler, etc. est que vous avez une SEQUENCE Séquence des étapes à suivre pour accomplir une tâche donnée parce que vous besoin d'avoir préparé toutes les dépendances d'abord et leurs dépendances plus tôt

Un exemple: pour faire un, vous devez avoir B et C présent, et b dépend de D et E, entraînant quelque chose comme

  • E
  • C
  • B
  • UNE

parce que vous devez avoir les ingrédients préparés avant de pouvoir les utiliser.

Les langages fonctionnels, en particulier les paresseux, tournez celui-ci à l'envers. En laissant un mot à dire qu'il a besoin de B et C, et laissez la langue d'exécution de la langue découvrir quand obtenir B et C (qui nécessite à son tour D et E), toutes sont évaluées au besoin pour évaluer un, vous pouvez créer très petit et concis blocs de construction, qui entraînent des programmes de petits et concis. Les langues paresseuses permettent également d'utiliser des listes infinies car seuls les éléments réellement utilisés sont calculés et sans avoir à stocker l'ensemble de la création de données de données en mémoire avant de pouvoir l'utiliser.

Le très bon tour, c'est que ce mécanisme automatique "Oh, j'ai besoin d'un mécanisme B et A C" est évolutif car il n'y a pas de restriction - comme dans le programme séquentiel - à propos de l'endroit où et quand cette évaluation peut arriver, afin qu'il puisse se produire en même temps et même sur différents processeurs ou ordinateurs.

Ça Pourquoi les langues fonctionnelles sont intéressantes - parce que le mécanisme "Que faire" est repris par le système d'exécution par opposition au programmeur qui doit le faire manuellement. Ceci est aussi important qu'une différence que la collection automatique des ordures était pour Java == au C et l'une des principales raisons pour lesquelles il est plus facile d'écrire un logiciel multi-threads robuste et évolutif dans Java que dans C. Il est encore plus facile d'écrire un logiciel multisfigé robuste et évolutif en langues fonctionnelles ...

30
user1249

À la fin des années 80 ans/début des années 90Ies, les ordinateurs devenaient suffisamment puissants pour le POOP de style SmallTalk. De nos jours, les ordinateurs sont suffisamment puissants pour FP. FP== La programmation est une programmation à un niveau plus élevé et donc souvent - bien que plus agréable à programmer - non la manière la plus efficace ne résoudra pas un certain problème. Mais les ordinateurs sont si rapides que vous ne vous souciez pas .

Le prorgammer multicœurs peut être plus facile avec les langages de programmation purement fonctionnels car vous êtes obligé d'isoler le code changeant par l'État.

Les frontières de programmation de programmation sont également floues aujourd'hui. Vous n'avez pas besoin d'abandonner un paradigme si vous voulez en utiliser un autre. Vous pouvez faire FP dans la plupart des langues populaires afin que la barrière d'entrée soit faible.

21
LennyProgrammers

Nous allons passer à une époque où le traitement multicœur n'est pas simplement quelque chose dans les salles de dos des laboratoires scientifiques ou sur du matériel spécialisé. C'est maintenant fait avec des transformateurs de produits de base. Programmation fonctionnelle, au moins la plupart des variantes que j'ai été exposées, tentent généralement de pousser une vue sur les unités de computation sans distances sans effets secondaires. Il s'agit du paradigme quintessentiel du travail multicœur, car il n'est pas nécessaire de maintenir l'État comprimé entre les processeurs.

Ce n'est qu'une des raisons pour lesquelles mais une fichue bonne raison de voir la programmation fonctionnelle en prise.

6
wheaties

Je pense que la réponse principale à cette question est "exposition".

La programmation fonctionnelle n'est rien de nouveau, j'ai été enseignée à Haskell à l'université il y a environ 12 ans et l'aimait. Mais rarement eu à utiliser la langue dans mon travail professionnel.

Récemment, il y a eu plusieurs langues gagnant une traction dans le flux principal qui utilise une approche multi-paradigme; f # , JavaScript étant des exemples premiers.

JavaScript en particulier, surtout lorsqu'il est utilisé avec une langue de structure de style fonctionnel comme jQuery ou prototype , devient une langue quotidienne pour de nombreuses personnes en raison de tout le travail sur les sites Web modernes dynamiques . Cette exposition au style fonctionnel rend les gens à réaliser le pouvoir qu'il subit, en particulier lorsque l'on est capable de revenir à un style impératif à volonté.

Une fois que les gens sont exposés, ils essaient des variantes de langues fonctionnelles plus complètement fouillées et commencent à les utiliser pour des tâches quotidiennes.

Avec F # Devenir une langue de première classe dans Visual Studio 2010 et JQuery (et al) devient si importante, il devient de devenir réaliste d'utiliser ces langues plutôt que simplement quelque chose d'obscurcir avec ou de faire des programmes isolés.

N'oubliez pas que le code doit être maintenu - une masse critique de développeurs doit utiliser et soutenir des langues pour que les entreprises se sentent en sécurité pour les utiliser.

5
Orbling

Dans cette conversation Anders Hejlsberg explique son point de vue sur le sujet.

[ÉDITER]

Désolé, le lien était faux. Maintenant, cela pointe vers le bon endroit.

Résumé extrêmement court de certains points de la parution d'une heure:

Les langages fonctionnels permettent un style de programmation plus déclaratif que les langues de procédure, les programmes écrits sont généralement plus concentrés sur le quoi au lieu du Comment. En raison de leur élégante structure mathématique, des fls sont également plus faciles à optimiser et à transformer les compilateurs, ce qui permet également une méta-programmation facile et la construction de DSL incorporés. Tout cela ensemble rend les programmes de champignons plus succincts et auto-documentants que les programmes de procédure.

En outre, face à l'ère de l'avenir de l'avenir, les langages de programmation doivent être en mesure d'utiliser plusieurs façons de filer/traiter de différentes manières. Multi Filetage sur des machines à base unique était en effet un mécanisme de partage de temps et l'architecture des systèmes reflétait ceci. Le filetage multiple sur plusieurs machines sera très différent. Les langues funcionnaires conviennent particulièrement à la parallélisation, car elles évitent principalement l'état, il n'est donc pas nécessaire de ne pas m'inquiéter autant que l'intégrité des données mutables partagées (car il y a eu des données mutables partagées).

3
pillmuncher

Je pense que c'est à faire de la corrélation étroite entre le paradigme de programmation fonctionnel et la programmation pour le Web.

RUBY ON Rails a apporté toute l'approche de programmation fonctionnelle dans un allégement net, car il offrait un chemin très rapide d'une application Web fonctionnelle (heh heh). Il y a un Discussion intéressante sur SO À ce sujet, et une réponse particulière se distingue:

La programmation fonctionnelle correspond très bien aux applications Web. L'application Web reçoit une requête HTTP et produit un résultat HTML. Cela pourrait être considéré comme une fonction des demandes aux pages.

Comparez-vous avec les applications de bureau, où nous avons généralement un processus de course à long terme, une interface utilisateur stillante et votre dataflow dans plusieurs directions. Ceci est plus adapté à OO== ce qui est préoccupé par les objets avec l'état et le passage de message.

Étant donné que la programmation fonctionnelle existe depuis des siècles, je me demande pourquoi je ne vois pas de nombreuses annonces d'emploi à la recherche de développeurs LISP pour Greenfield Web Projects.

2
Gary Rowe

La programmation fonctionnelle me donne le même sens de tinctoriel de "-WOW, c'est nouvea" Comme quand j'ai commencé à fumer avec des objets il y a des années.

Je réalise que FP n'est pas un nouveau concept de loin, mais non plus OO quand il a obtenu sa réelle pause dans les années quatre-vingt-dix quand "tout le monde" a soudain été sauté de la programmation procédurale. Ceci était en grande partie dû au succès rapide de Java et ultérieur c #.

J'imagine que la même chose se produira avec FP finalement une fois que le prochain lot de langues commence à se répandre de la même manière. Beaucoup comme ils ont déjà, au moins dans certains cercles, avec des langues comme Scala et f #.

1
Martin Wickman

Voici mes questions: 1. Qu'est-ce qui a contribué au récent FP enthousiasme? Est simplement ennuyé avec OO ou quelque chose a changé pour faire FP plus nécessaire que Auparavant? 2. Est-ce que cela indique A FP Future? Ou est-ce une FAD, comme des bases de données OBJECTOR ORIENT?

D'autres ont donné une bonne raison technique.

Je pense que la raison principale FP gagne la traction parmi les types de développeurs et de gestionnaires moyens est qu'il est prometteur de permettre une meilleure utilisation des processeurs multi-coreaux. De tout ce que j'ai lu FP Permet une programmation parallèle plus facile (pas facile).

C'est une utilisation généralisée future sera si la promesse est réelle et est remplie.

1
ElGringoGrande

Il était que des personnes écrivaient des programmes à exécuter sur le bureau à l'aide des API natives du système d'exploitation et ces API étaient (généralement) écrites en C, donc pour la plupart si vous vouliez écrire un programme pour les API natives, vous écrit ce programme en C.

Je pense que la nouvelle innovation au cours des 10 dernières années est de savoir à la diversité des API, en particulier pour des choses comme le développement Web où les API de la plate-forme ne sont pas pertinentes (car la construction d'une page Web implique essentiellement une manipulation de chaînes). Puisque vous ne codez pas directement à l'API Win32 ou à la POSIX API, cela donne aux gens la liberté d'essayer des langues fonctionnelles.

0
Ken Bloom

C'est Nety et Nifty et chatouille votre cerveau. C'est très bien.

C'est aussi, IMHO, un bande passante classique. Une solution à la recherche d'un problème.

C'est comme toutes ces sociétés de démarrage fondées par des ingénieurs éblouissaient avec une idée préférée, qui brûlent de temps en temps, mais sont doublées discrètement par des entreprises fondées sur la fourniture de ce qui est nécessaire.

C'est la nouvelle idée que j'aimerais voir décoller, programmation basée sur des besoins, et non une programmation basée sur des idées. Peut-être que cela semble banal, mais je pense que cela peut en fait être assez créatif, et tifty.

0
Mike Dunlavey