Ich sehe hier viel Gerede über funktionale Sprachen und so. Warum würden Sie eine über eine "traditionelle" Sprache verwenden? Was machen sie besser? Worin sind sie schlimmer? Was ist die ideale funktionale Programmieranwendung?
Ich sehe hier viel Gerede über funktionale Sprachen und so. Warum würden Sie eine über eine "traditionelle" Sprache verwenden? Was machen sie besser? Worin sind sie schlimmer? Was ist die ideale funktionale Programmieranwendung?
Antworten:
Funktionale Sprachen verwenden ein anderes Paradigma als imperative und objektorientierte Sprachen. Sie verwenden nebenwirkungsfreie Funktionen als Grundbaustein in der Sprache. Dies ermöglicht viele Dinge und erschwert viele Dinge (oder unterscheidet sich in den meisten Fällen von dem, was Menschen gewohnt sind).
Einer der größten Vorteile bei der funktionalen Programmierung besteht darin, dass die Reihenfolge der Ausführung von nebenwirkungsfreien Funktionen nicht wichtig ist. In Erlang wird dies beispielsweise verwendet, um die Parallelität auf sehr transparente Weise zu aktivieren. Und weil sich Funktionen in funktionalen Sprachen sehr ähnlich wie mathematische Funktionen verhalten, ist es einfach, diese in funktionale Sprachen zu übersetzen. In einigen Fällen kann dies die Lesbarkeit des Codes verbessern.
Traditionell war einer der großen Nachteile der funktionalen Programmierung auch das Fehlen von Nebenwirkungen. Es ist sehr schwierig, nützliche Software ohne E / A zu schreiben, aber E / A ist ohne Nebenwirkungen in Funktionen schwer zu implementieren. Daher haben die meisten Menschen nie mehr aus der funktionalen Programmierung herausgeholt, als eine einzelne Ausgabe aus einer einzelnen Eingabe zu berechnen. In modernen Mischparadigmensprachen wie F # oder Scala ist dies einfacher.
Viele moderne Sprachen enthalten Elemente aus funktionalen Programmiersprachen. C # 3.0 verfügt über viele funktionale Programmierfunktionen, und Sie können auch in Python funktionale Programmierung durchführen. Ich denke, die Gründe für die Popularität der funktionalen Programmierung liegen hauptsächlich in zwei Gründen: Parallelität wird bei der normalen Programmierung zu einem echten Problem, da wir immer mehr Multiprozessor-Computer bekommen. und die Sprachen werden zugänglicher.
Ich glaube nicht, dass es eine Frage zum funktionalen Ansatz der Programmierung gibt, der sich durchsetzt, da er seit etwa 40 Jahren (als Programmierstil) verwendet wird. Immer wenn ein OO-Programmierer sauberen Code schreibt, der unveränderliche Objekte bevorzugt, leiht dieser Code funktionale Konzepte aus.
Sprachen, die einen funktionalen Stil erzwingen, erhalten heutzutage jedoch viel virtuelle Tinte, und ob diese Sprachen in Zukunft dominant werden, ist eine offene Frage. Mein eigener Verdacht ist, dass hybride Multi-Paradigmen-Sprachen wie Scala oder OCaml wahrscheinlich über "puristische" Funktionssprachen dominieren werden, genauso wie die reine OO-Sprache (Smalltalk, Beta usw.) die Mainstream-Programmierung beeinflusst hat, aber noch nicht beendet ist als die am häufigsten verwendeten Notationen.
Schließlich kann ich nicht widerstehen, darauf hinzuweisen, dass Ihre Kommentare zu FP in hohem Maße parallel zu den Bemerkungen sind, die ich vor nicht allzu vielen Jahren von prozeduralen Programmierern gehört habe:
Ebenso wie grafische Benutzeroberflächen und "Code als Geschäftsmodell" Konzepte waren, die dazu beigetragen haben, dass OO allgemein anerkannt wurde, glaube ich, dass eine verstärkte Verwendung von Unveränderlichkeit und einfachere (massive) Parallelität mehr Programmierern helfen wird, die Vorteile des funktionalen Ansatzes zu erkennen . Aber so viel wir in den letzten 50 Jahren gelernt haben , die die gesamte Geschichte der digitalen Computerprogrammierung ausmachen, ich denke, wir müssen noch viel lernen. In zwanzig Jahren werden Programmierer erstaunt auf die primitive Natur der Tools zurückblicken, die wir derzeit verwenden, einschließlich der mittlerweile beliebten OO- und FP-Sprachen.
Das Hauptplus für mich ist die inhärente Parallelität, zumal wir uns jetzt von mehr MHz weg und hin zu immer mehr Kernen bewegen.
Ich denke nicht, dass es das nächste Programmierparadigma werden und OO-Methoden vollständig ersetzen wird, aber ich denke, wir werden an den Punkt kommen, an dem wir entweder einen Teil unseres Codes in einer funktionalen Sprache schreiben müssen oder unsere Allzwecksprachen wachsen, um mehr funktionelle Konstrukte einzuschließen.
Selbst wenn Sie nie professionell in einer funktionalen Sprache arbeiten, werden Sie durch das Verständnis der funktionalen Programmierung zu einem besseren Entwickler. Es gibt Ihnen eine neue Perspektive auf Ihren Code und die Programmierung im Allgemeinen.
Ich sage, es gibt keinen Grund, es nicht zu lernen.
Ich denke, die Sprachen, die funktionale und imperative Stile gut mischen, sind am interessantesten und am wahrscheinlichsten erfolgreich.
Ich bin immer skeptisch gegenüber dem nächsten großen Ding. Oft ist das Next Big Thing ein reiner Zufall der Geschichte, zur richtigen Zeit am richtigen Ort zu sein, egal ob die Technologie gut ist oder nicht. Beispiele: C ++, Tcl / Tk, Perl. Alle fehlerhaften Technologien, alle äußerst erfolgreich, weil sie entweder als Lösung der heutigen Probleme oder als nahezu identisch mit etablierten Standards oder als beides angesehen wurden. Funktionale Programmierung mag zwar großartig sein, aber das bedeutet nicht, dass sie übernommen wird.
Aber ich kann Ihnen sagen, warum die Leute von funktionaler Programmierung begeistert sind : Viele, viele Programmierer haben eine Art "Konvertierungserfahrung" gemacht, bei der sie feststellen, dass die Verwendung einer funktionalen Sprache sie beim Produzieren doppelt so produktiv (oder vielleicht zehnmal so produktiv) macht Code, der widerstandsfähiger gegen Änderungen ist und weniger Fehler aufweist. Diese Leute betrachten funktionale Programmierung als Geheimwaffe; Ein gutes Beispiel für diese Denkweise ist Paul Grahams Beating the Averages . Oh, und seine Bewerbung? E-Commerce-Webanwendungen.
Seit Anfang 2006 gibt es auch einige Begeisterung für funktionale Programmierung und Parallelität. Da sich Leute wie Simon Peyton Jones seit mindestens 1984 immer wieder um Parallelität sorgen, halte ich nicht den Atem an, bis funktionale Sprachen das Multicore-Problem lösen. Aber es erklärt einige der zusätzlichen Summen im Moment.
Im Allgemeinen leisten amerikanische Universitäten schlechte Arbeit beim Unterrichten von funktionaler Programmierung. Es gibt einen starken Kern der Unterstützung für das Unterrichten von Intro-Programmierung mithilfe von Schema , und Haskell genießt dort auch eine gewisse Unterstützung, aber es gibt nur sehr wenig Möglichkeiten, fortgeschrittene Techniken für funktionale Programmierer zu unterrichten. Ich habe einen solchen Kurs in Harvard unterrichtet und werde dies auch in diesem Frühjahr bei Tufts tun. Benjamin Pierce hat einen solchen Kurs bei Penn unterrichtet. Ich weiß nicht, ob Paul Hudak in Yale etwas getan hat. Die europäischen Universitäten machen einen viel besseren Job; Beispielsweise wird die funktionale Programmierung an wichtigen Orten in Dänemark, den Niederlanden, Schweden und Großbritannien hervorgehoben. Ich habe weniger Ahnung, was in Australasien passiert.
Ich sehe hier im Raum niemanden, der den Elefanten erwähnt, also denke ich, dass es an mir liegt :)
JavaScript ist eine funktionale Sprache. Da immer mehr Leute mit JS fortgeschrittenere Dinge tun, insbesondere die Feinheiten von jQuery, Dojo und anderen Frameworks nutzen, wird FP durch die Hintertür des Webentwicklers eingeführt.
In Verbindung mit Schließungen macht FP JS-Code wirklich leicht und dennoch lesbar.
Prost, PS
Die meisten Anwendungen sind einfach genug, um auf normale OO-Weise gelöst zu werden
OO Wege waren nicht immer "normal". Der Standard dieses Jahrzehnts war das marginalisierte Konzept des letzten Jahrzehnts.
Funktionale Programmierung ist Mathematik. Paul Graham über Lisp (Ersatzfunktionale Programmierung für Lisp):
Die kurze Erklärung, warum diese Sprache der 1950er Jahre nicht veraltet ist, ist, dass es sich nicht um Technologie, sondern um Mathematik handelte und Mathematik nicht abgestanden wird. Der richtige Vergleich mit Lisp ist nicht die Hardware der 1950er Jahre, sondern beispielsweise der Quicksort-Algorithmus, der 1960 entdeckt wurde und immer noch die schnellste Allzweck-Sorte ist.
Ich wette, Sie wussten nicht, dass Sie funktional programmieren, als Sie Folgendes verwendeten:
Der durchschnittliche Unternehmensprogrammierer, z. B. die meisten Leute, mit denen ich zusammenarbeite, wird es nicht verstehen und die meisten Arbeitsumgebungen lassen Sie nicht darin programmieren
Das ist allerdings nur eine Frage der Zeit. Ein durchschnittlicher Unternehmensprogrammierer lernt, was auch immer das aktuelle große Ding ist. Vor 15 Jahren haben sie OOP nicht verstanden. Wenn sich FP durchsetzt, werden Ihre "durchschnittlichen Unternehmensprogrammierer" folgen.
Es wird nicht wirklich an Universitäten gelehrt (oder ist es heutzutage?)
Variiert stark. An meiner Universität ist SML die allererste Sprache, in die Studenten eingeführt werden. Ich glaube, das MIT unterrichtet LISP als Kurs im ersten Jahr. Diese beiden Beispiele mögen natürlich nicht repräsentativ sein, aber ich glaube, dass die meisten Universitäten zumindest einige optionale Kurse zu FP anbieten, auch wenn sie dies nicht zu einem obligatorischen Bestandteil des Lehrplans machen.
Die meisten Anwendungen sind einfach genug, um auf normale OO-Weise gelöst zu werden
Es geht aber nicht wirklich um "einfach genug". Wäre eine Lösung einfacher in FP (oder besser lesbar, robust, elegant, performant)? Viele Dinge sind "einfach genug, um in Java gelöst zu werden", aber es erfordert immer noch eine unglaubliche Menge an Code.
Denken Sie auf jeden Fall daran, dass FP-Befürworter seit mehreren Jahrzehnten behaupten, es sei das nächste große Ding. Vielleicht haben sie Recht, aber denken Sie daran, dass dies nicht der Fall war, als sie vor 5, 10 oder 15 Jahren dieselbe Behauptung aufstellten.
Eine Sache, die definitiv zu ihren Gunsten zählt, ist jedoch, dass C # in letzter Zeit eine scharfe Wendung in Richtung FP genommen hat, insofern es praktisch eine Generation von Programmierern zu FP-Programmierern macht, ohne dass sie es überhaupt bemerken . Das könnte den Weg für die "Revolution" der FP ebnen. Könnte sein. ;)
Der Mensch kann die Vollkommenheit und Unvollkommenheit seiner gewählten Kunst nicht verstehen, wenn er den Wert in anderen Künsten nicht sehen kann. Das Befolgen von Regeln erlaubt nur die Entwicklung bis zu einem Punkt in der Technik, und dann müssen der Schüler und der Künstler mehr lernen und weiter suchen. Es ist sinnvoll, sowohl andere als auch strategische Künste zu studieren.
Wer hat nicht mehr über sich selbst gelernt, indem er die Aktivitäten anderer beobachtet hat? Um das Schwert zu lernen, studiere die Gitarre. Um die Faust zu lernen, studieren Sie Handel. Nur das Schwert zu studieren, macht dich engstirnig und lässt dich nicht nach außen wachsen.
- Miyamoto Musashi, "Ein Buch mit fünf Ringen"
Ein wesentliches Merkmal einer funktionalen Sprache ist das Konzept erstklassiger Funktionen. Die Idee ist, dass Sie Funktionen als Parameter an andere Funktionen übergeben und als Werte zurückgeben können.
Bei der funktionalen Programmierung wird Code geschrieben, der den Status nicht ändert. Der Hauptgrund dafür ist, dass aufeinanderfolgende Aufrufe einer Funktion das gleiche Ergebnis liefern. Sie können Funktionscode in jeder Sprache schreiben, die erstklassige Funktionen unterstützt. Es gibt jedoch einige Sprachen wie Haskell, in denen Sie den Status nicht ändern können. Tatsächlich sollten Sie überhaupt keine Nebenwirkungen (wie das Ausdrucken von Text) verursachen - was so klingt, als ob es völlig nutzlos sein könnte.
Haskell verwendet stattdessen einen anderen Ansatz für IO: Monaden. Dies sind Objekte, die die gewünschte E / A-Operation enthalten, die von der obersten Ebene Ihres Interpreters ausgeführt werden soll. Auf jeder anderen Ebene sind sie einfach Objekte im System.
Welche Vorteile bietet die funktionale Programmierung? Die funktionale Programmierung ermöglicht die Codierung mit weniger Fehlerpotentialen, da jede Komponente vollständig isoliert ist. Die Verwendung von Rekursions- und erstklassigen Funktionen ermöglicht auch einfache Korrektheitsnachweise, die typischerweise die Struktur des Codes widerspiegeln.
Ich denke nicht, dass die meisten realistischen Leute glauben, dass sich funktionale Programmierung durchsetzen wird (wird zum Hauptparadigma wie OO). Schließlich sind die meisten geschäftlichen Probleme keine hübschen mathematischen Probleme, sondern haarige zwingende Regeln, um Daten zu verschieben und auf verschiedene Arten anzuzeigen, was bedeutet, dass sie nicht für ein reines funktionales Programmierparadigma geeignet sind (die Lernkurve von Monad übersteigt OO bei weitem).
OTOH, funktionale Programmierung macht das Programmieren Spaß. Es lässt Sie die inhärente, zeitlose Schönheit prägnanter Ausdrücke der zugrunde liegenden Mathematik des Universums schätzen. Die Leute sagen, dass das Erlernen der funktionalen Programmierung Sie zu einem besseren Programmierer macht. Das ist natürlich sehr subjektiv. Ich persönlich denke auch nicht, dass das völlig stimmt.
Es macht dich zu einem besseren Lebewesen.
Ich muss dicht sein, aber ich verstehe es immer noch nicht. Gibt es tatsächliche Beispiele für kleine Apps, die in einer funktionalen Sprache wie F # geschrieben sind, in der Sie im Quellcode nachsehen können, wie und warum es besser war, einen solchen Ansatz zu verwenden, als beispielsweise C #?
Ich möchte darauf hinweisen, dass alles, was Sie über funktionale Sprachen gesagt haben, die meisten Leute vor etwa 20 Jahren über objektorientierte Sprachen sagten. Damals war es sehr üblich, von OO zu hören:
* The average corporate programmer, e.g. most of the people I work with, will not understand it and most work environments will not let you program in it
* It's not really taught at universities (or is it nowadays?)
* Most applications are simple enough to be solved in normal IMPERATIVE ways
Veränderung muss von irgendwoher kommen. Eine sinnvolle und wichtige Änderung wird sich vollziehen, unabhängig davon, ob in früheren Technologien geschulte Personen der Meinung sind, dass eine Änderung nicht erforderlich ist. Denken Sie, dass der Wechsel zu OO trotz aller Leute, die zu dieser Zeit dagegen waren, gut war?
F # könnte sich durchsetzen, weil Microsoft es vorantreibt.
Profi:
Gegen:
Also gebe ich F # eine 50: 50-Chance, wichtig zu werden. Andere funktionale Sprachen werden es in naher Zukunft nicht schaffen.
Ich denke, ein Grund dafür ist, dass einige Leute der Meinung sind, dass der wichtigste Teil der Akzeptanz einer Sprache darin besteht, wie gut die Sprache ist . Leider sind die Dinge selten so einfach. Zum Beispiel würde ich argumentieren, dass der größte Faktor für Pythons Akzeptanz nicht die Sprache selbst ist (obwohl das so ist ziemlich wichtig). Der Hauptgrund, warum Python so beliebt ist, ist seine riesige Standardbibliothek und die noch größere Community von Bibliotheken von Drittanbietern.
Sprachen wie Clojure oder F # können die Ausnahme von der Regel sein, wenn man bedenkt, dass sie auf der JVM / CLR basieren. Daher habe ich keine Antwort für sie.
Die meisten Anwendungen können in [Geben Sie hier Ihre Lieblingssprache, Ihr Lieblingsparadigma usw. ein] gelöst werden.
Obwohl dies zutrifft, können verschiedene Werkzeuge verwendet werden, um verschiedene Probleme zu lösen. Functional ermöglicht nur eine weitere Abstraktion auf höherer (höherer?) Ebene, mit der wir unsere Aufgaben bei korrekter Verwendung effektiver erledigen können.
Es scheint mir, dass diejenigen, die als Student nie Lisp oder Scheme gelernt haben, es jetzt entdecken. Wie bei vielen Dingen in diesem Bereich besteht die Tendenz, zu übertreiben und hohe Erwartungen zu wecken ...
Es wird vergehen.
Funktionale Programmierung ist großartig. Es wird jedoch nicht die Welt übernehmen. C, C ++, Java, C # usw. werden weiterhin verfügbar sein.
Ich denke, daraus werden mehr sprachübergreifende Fähigkeiten entstehen - zum Beispiel Dinge in einer funktionalen Sprache zu implementieren und dann in anderen Sprachen Zugriff auf diese Dinge zu gewähren.
Als ich "Die nächste Mainstream-Programmiersprache: Die Perspektive eines Spieleentwicklers" von Tim Sweeney, Epic Games, las, war mein erster Gedanke: Ich musste Haskell lernen.
Die Dinge bewegen sich seit einiger Zeit in eine funktionale Richtung. Die beiden coolen neuen Kinder der letzten Jahre, Ruby und Python, sind beide den funktionalen Sprachen radikal näher als vor ihnen - so sehr, dass einige Lisper damit begonnen haben, das eine oder andere als "nah genug" zu unterstützen.
Und da die massiv parallele Hardware einen evolutionären Druck auf alle ausübt - und funktionale Sprachen am besten geeignet sind, um mit den Änderungen umzugehen - ist es nicht mehr so weit wie früher zu glauben, dass Haskell oder F # das nächste große Ding sein werden.
Haben Sie in letzter Zeit die Entwicklung der Programmiersprachen verfolgt? Jede neue Version aller gängigen Programmiersprachen scheint immer mehr Funktionen aus der funktionalen Programmierung zu übernehmen.
Schließungen, anonyme Funktionen, Übergabe und Rückgabe von Funktionen als Werte waren exotische Merkmale, die nur Lisp- und ML-Hackern bekannt waren. Aber nach und nach haben C #, Delphi, Python, Perl, Javascript Unterstützung für Schließungen hinzugefügt. Es ist nicht möglich, dass eine aufstrebende Sprache ohne Schließung ernst genommen wird.
Mehrere Sprachen, insbesondere Python, C # und Ruby, unterstützen native Listenverständnisse und Listengeneratoren.
ML war 1973 Pionier der generischen Programmierung, aber die Unterstützung für Generika ("parametrischer Polymorphismus") ist erst in den letzten 5 Jahren zum Industriestandard geworden. Wenn ich mich richtig erinnere, unterstützte Fortran Generika im Jahr 2003, gefolgt von Java 2004, C # im Jahr 2005 und Delphi im Jahr 2008. (Ich weiß, dass C ++ Vorlagen seit 1979 unterstützt, aber 90% der Diskussionen über C ++ 's STL beginnen mit "Hier gibt es Dämonen". .)
Was macht diese Funktionen für Programmierer attraktiv? Es sollte klar sein: Es hilft Programmierern, kürzeren Code zu schreiben . Alle Sprachen werden in Zukunft - zumindest - Schließungen unterstützen, wenn sie wettbewerbsfähig bleiben wollen. In dieser Hinsicht ist die funktionale Programmierung bereits im Mainstream.
Die meisten Anwendungen sind einfach genug, um auf normale OO-Weise gelöst zu werden
Wer sagt, dass funktionale Programmierung nicht auch für einfache Dinge verwendet werden kann? Nicht jedes Funktionsprogramm muss ein Compiler, ein Theorembeweiser oder ein massiv paralleler Telekommunikationsschalter sein. Zusätzlich zu meinen komplizierteren Projekten verwende ich regelmäßig F # für Ad-hoc-Wegwerfskripte.
Es setzt sich durch, weil es das beste Werkzeug zur Kontrolle der Komplexität ist. Siehe:
- Folien 109-116 von Simon Peyton-Jones sprechen "A Taste of Haskell"
- "Die nächste Mainstream-Programmiersprache: Die Perspektive eines Spieleentwicklers" von Tim Sweeney
Ich stimme dem ersten Punkt zu, aber die Zeiten ändern sich. Unternehmen werden reagieren, auch wenn sie spät adoptieren, wenn sie sehen, dass es einen Vorteil gibt. Das Leben ist dynamisch.
Sie unterrichteten Ende der 90er Jahre Haskell und ML in Stanford. Ich bin sicher, dass Orte wie Carnegie Mellon, MIT, Stanford und andere gute Schulen es den Schülern präsentieren.
Ich bin damit einverstanden, dass die meisten Apps, die relationale Datenbanken im Web verfügbar machen, noch lange in diesem Sinne bestehen bleiben. Java EE, .NET, RoR und PHP haben einige ziemlich gute Lösungen für dieses Problem entwickelt.
Sie sind auf etwas Wichtiges gestoßen: Es könnte das Problem sein, das nicht einfach mit anderen Mitteln gelöst werden kann, um die funktionale Programmierung zu verbessern. Was würde das sein?
Werden massive Multicore-Hardware und Cloud Computing sie vorantreiben?
Weil FP erhebliche Vorteile in Bezug auf Produktivität, Zuverlässigkeit und Wartbarkeit bietet. Many-Core kann eine Killer-App sein, mit der große Unternehmen trotz großer Mengen an Legacy-Code endlich umsteigen können. Darüber hinaus erhalten selbst große kommerzielle Sprachen wie C # aufgrund von Many-Core-Bedenken einen ausgeprägten funktionalen Charakter - Nebenwirkungen einfach passt nicht gut zu Parallelität und Parallelität.
Ich bin nicht der Meinung, dass "normale" Programmierer es nicht verstehen werden. Sie werden, genau wie sie schließlich OOP verstanden haben (was genauso mysteriös und seltsam ist, wenn nicht mehr).
Außerdem unterrichten die meisten Universitäten FP, viele unterrichten es sogar als ersten Programmierkurs.
Wow - das ist eine interessante Diskussion. Meine eigenen Gedanken dazu:
FP macht einige Aufgaben relativ einfach (im Vergleich zu Nicht-FP-Sprachen). Nicht-FP-Sprachen beginnen bereits, Ideen von FP zu übernehmen, daher vermute ich, dass sich dieser Trend fortsetzen wird und wir eher eine Fusion sehen werden, die den Menschen helfen sollte, den Sprung zu FP zu erleichtern.
Ich weiß nicht, ob es sich durchsetzen wird oder nicht, aber nach meinen Untersuchungen lohnt es sich mit ziemlicher Sicherheit, eine funktionale Sprache zu lernen, und Sie werden zu einem besseren Programmierer. Nur das Verständnis der referenziellen Transparenz macht viele Entwurfsentscheidungen so viel einfacher - und die daraus resultierenden Programme sind viel einfacher zu überlegen. Wenn Sie auf ein Problem stoßen, handelt es sich im Grunde eher um ein Problem mit der Ausgabe einer einzelnen Funktion als um ein Problem mit einem inkonsistenten Zustand, der durch eine der Hunderten von Klassen / Methoden / Funktionen verursacht worden sein könnte in einer unparteiischen Sprache mit Nebenwirkungen.
Die Staatenlosigkeit von FP entspricht natürlicher der Staatenlosigkeit des Webs, und daher eignen sich funktionale Sprachen leichter für elegantere, RESTFUL-Webanwendungen. Im Gegensatz zu JAVA- und .NET-Frameworks, die auf schrecklich hässliche HACKS wie VIEWSTATE- und SESSION-Schlüssel zurückgreifen müssen, um den Anwendungsstatus und die (gelegentlich recht undichte) Abstraktion einer zustandsbehafteten imperativen Sprache auf einer im Wesentlichen zustandslosen Funktionsplattform wie dem Web beizubehalten.
Und je zustandsloser Ihre Anwendung ist, desto einfacher kann sie sich für die parallele Verarbeitung eignen. Schrecklich wichtig für das Web, wenn Ihre Website populär wird. Es ist nicht immer einfach, einer Site einfach mehr Hardware hinzuzufügen, um eine bessere Leistung zu erzielen.
Meiner Ansicht nach wird es sich jetzt durchsetzen, da Microsoft es viel weiter in den Mainstream gedrängt hat. Für mich ist es attraktiv, weil es für uns tun kann, weil es eine neue Herausforderung ist und weil es Beschäftigungsmöglichkeiten für die Zukunft bietet.
Einmal gemeistert, wird es ein weiteres Werkzeug sein, um uns als Programmierer produktiver zu machen.
Ein in der Diskussion übersehener Punkt ist, dass die besten Typsysteme in zeitgenössischen FP-Sprachen zu finden sind. Darüber hinaus können Compiler alle (oder zumindest die meisten) Typen automatisch ableiten.
Es ist interessant, dass man beim Programmieren von Java die Hälfte der Zeit damit verbringt, Typnamen zu schreiben, aber Java ist bei weitem nicht typsicher. Während Sie möglicherweise niemals Typen in ein Haskell-Programm schreiben (außer als eine Art vom Compiler geprüfte Dokumentation) und der Code 100% typsicher ist.
Zusätzlich zu den anderen Antworten zwingt das Gießen der Lösung in rein funktionalen Begriffen dazu, das Problem besser zu verstehen. Umgekehrt wird das Denken in einem funktionalen Stil bessere * Fähigkeiten zur Problemlösung entwickeln.
* Entweder weil das Funktionsparadigma besser ist oder weil es einen zusätzlichen Anstellwinkel bietet.