Je vois beaucoup de discussions ici sur les langages fonctionnels et d'autres choses. Pourquoi voudriez-vous utiliser un sur un "traditionnel" de la langue? Que font-ils mieux? Quels sont-ils pire? Quel est l'idéal de la programmation fonctionnelle de l'application?
Réponses
Trop de publicités?Les langages fonctionnels utiliser un autre paradigme que impérative et orientée objet les langues. Ils utilisent sans effets secondaires fonctionne comme un bloc de construction de base dans la langue. Cela permet à beaucoup de choses et fait beaucoup de choses encore plus difficiles (ou dans la plupart des cas différents de ce que les gens sont utilisés pour l')
L'un des gros avantages de la programmation fonctionnelle, c'est que l'ordre d'exécution des sans effets secondaires des fonctions n'est pas important. Par exemple en erlang ce est utilisé pour permettre la simultanéité d'une façon très transparente. Et parce que les fonctions dans les langages fonctionnels se comportent de manière très similaire aux fonctions mathématiques, il est facile de traduire ceux-ci dans les langages fonctionnels. Dans certains cas, cela peut rendre le code plus lisible.
Traditionnellement l'un des grands inconvénients de la programmation fonctionnelle a également été l'absence d'effets secondaires. Il est très difficile d'écrire un logiciel utile sans IO, mais IO est difficile à mettre en œuvre sans effets secondaires dans les fonctions. Donc la plupart des gens n'ont jamais obtenu plus de la programmation fonctionnelle, que le calcul d'une seule sortie à partir d'une entrée unique. Moderne mixte paradigme langues comme F# ou scala c'est plus facile.
Beaucoup de langues modernes ont des éléments de langages de programmation fonctionnelle. C# 3.0 a beaucoup fonctionnelles, fonctionnalités de programmation et vous pouvez faire de la programmation fonctionnelle en python aussi. Je pense que les raisons de la popularité de la programmation fonctionnelle est surtout à cause de deux raisons. La simultanéité est d'obtenir un vrai problème dans la programmation normale parce que nous sommes de plus en plus et de plus en plus des ordinateurs multiprocesseurs. Et les langues deviennent de plus en plus accessible.
Je ne pense pas qu'il n'y a aucune question à propos de l'approche fonctionnelle de la programmation de "rattrapage", parce qu'il est en cours d'utilisation (comme un style de programmation) pendant environ 40 ans. Chaque fois qu'un OO programmeur écrit un code propre qui favorise des objets immuables, que le code est emprunt de concepts fonctionnels.
Cependant, les langues que d'appliquer un style fonctionnel obtiennent beaucoup d'encre virtuelle de ces jours, et si ces langues vont devenir dominante dans l'avenir est une question ouverte. Je soupçonne que hybride, multi-paradigme des langages tels que Scala ou OCaml domineront probablement plus "puriste" langages fonctionnels de la même manière que le pur langage OO (Smalltalk, Beta, etc.) ont influencé la programmation grand public, mais qui n'ont pas fini comme le plus largement utilisé les notations.
Enfin, je ne peux pas résister à souligner que vos observations sur les FP sont hautement parallèle aux remarques que j'ai entendu de procédure que les programmeurs de ne pas qu'il y a plusieurs années:
- Le (mythique, à mon humble avis) "moyenne" programmeur n'a pas à le comprendre.
- Ce n'est pas enseignées.
- Tout programme que vous pouvez écrire avec elle peut être écrite d'une autre façon avec les techniques actuelles.
Tout comme les interfaces utilisateur graphiques et le code de "comme un modèle de l'entreprise" étaient des concepts qui ont aidé OO devenir plus largement apprécié, je crois que l'augmentation de l'utilisation de l'immuabilité et la plus simple (massive) de parallélisme, permettra à plus de programmeurs à voir les avantages de l'approche fonctionnelle de l'offre. Mais comme beaucoup comme nous l'avons appris dans le cours des 50 dernières années qui composent l'ensemble de l'histoire numérique de programmation d'ordinateur, je pense que nous avons encore beaucoup à apprendre. Vingt ans à partir de maintenant, les programmeurs vont regarder en arrière dans l'émerveillement face à la nature primitive des outils que nous utilisons actuellement, y compris le désormais populaire OO et FP langues.
Le principal avantage pour moi est inhérente à sa parallélisme, d'autant que nous nous dirigeons maintenant à l'écart de plus de MHz et vers plus de et plus de cœurs.
Je ne pense pas qu'il va devenir le prochain paradigme de programmation et de remplacer complètement OO type de méthodes, mais je pense qu'on va en arriver au point que nous avons besoin d'écrire certains de nos code dans un langage fonctionnel, ou notre usage général les langues vont grandir pour inclure plus de constructions fonctionnelles.
Même si vous ne travaillez pas dans un langage fonctionnel professionnellement, la compréhension de la programmation fonctionnelle fera de vous un meilleur développeur. Il vous donnera une nouvelle perspective sur votre code et de la programmation en général.
Je dis il n'y a pas de raison de ne pas l'apprendre.
Je pense que les langues qui font un bon travail de mixage fonctionnel et impératif de style sont les plus intéressants et sont les plus susceptibles de réussir.
Je suis toujours sceptique sur la Prochaine Grande Chose. Beaucoup de fois la Prochaine Grande Chose est un pur accident de l'histoire, d'être là au bon endroit, au bon moment, peu importe si la technique est bonne ou pas. Exemples: C++, Tcl/Tk, Perl. Toutes les technologies de l'imparfait, tous énormément de succès parce qu'ils ont été perçus, soit pour résoudre les problèmes de la journée, ou à être à peu près identiques à ancrée normes, ou les deux. Programmation fonctionnelle peut en effet être grande, mais cela ne signifie pas qu'elle sera adoptée.
Mais je peut vous dire pourquoi les gens sont excités à propos de la programmation fonctionnelle: beaucoup, beaucoup de programmeurs ont eu une sorte de "conversion de l'expérience", dans lequel ils découvrent que l'utilisation d'un langage fonctionnel rend deux fois plus productive (ou peut-être dix fois plus productif), tout en produisant un code qui est le plus résilientes au changement et a moins de bugs. Ces gens pensent de la programmation fonctionnelle comme une arme secrète, un bon exemple de cet état d'esprit est Paul Graham Battre les Moyennes. Oh, et son application? E-commerce web apps.
Depuis le début de 2006, il y a eu aussi une discussion à propos de la programmation fonctionnelle et le parallélisme. Puisque les gens comme Simon Peyton Jones ont été se soucier de parallélisme hors et sous tension depuis au moins 1984, je ne retiens pas mon souffle jusqu'à ce que les langages fonctionnels résoudre le multicœur problème. Mais cela explique-uns des buzz droite environ maintenant.
En général, les universités Américaines sont en train de faire un mauvais travail de l'enseignement de la programmation fonctionnelle. Il y a une base solide de soutien pour l' enseignement de l'intro de la programmation à l'aide de Schéma, et Haskell bénéficie également de quelques soutien de, mais il ya très peu dans la voie de l'enseignement technique de pointe pour le programmeur fonctionnel. J'ai enseigné un cours à Harvard, et le fera à nouveau ce printemps à la Tufts. Benjamin Pierce a enseigné un cours à l'université de Penn. Je ne sais pas si Paul Hudak a fait quoi que ce soit à Yale. Les universités Européennes sont en train de faire un bien meilleur travail; par exemple, la programmation fonctionnelle est souligné dans les endroits importants au Danemark, les pays-bas, la Suède et le royaume-UNI. J'ai de moins en moins de sens de ce qui se passe en Australasie.