Ist funktionale Programmierung für die Webentwicklung relevant?

87

Ich habe in letzter Zeit so viel über funktionale Programmierung gesehen und Clojure sieht besonders interessant aus. Obwohl ich die grundlegende Beschreibung dessen, was es ist, "verstehe", kann ich nicht herausfinden, wie ich sie als Webentwickler täglich verwenden würde, wenn ich überhaupt kann. Vieles, was ich gelesen habe, konzentriert sich eher auf die mathematische Seite der funktionalen Programmierung als auf typische Programmiersituationen, die in regulären OO zu finden sind.

Habe ich das falsche Ende des Stocks? Hat funktionale Programmierung nichts mit Webentwicklung zu tun? Wenn nicht, gibt es Beispiele dafür, wie es "für das Web" verwendet wird?

Hass_
quelle

Antworten:

30

Ein paar Beispiele aus meinem Kopf:

Greg Case
quelle
7
Yahoo! Der Store wurde vor einigen Jahren in c ++ umgeschrieben.
Apg
5
Sprache! = Programmierparadigma.
Phkahler
58
Seltsame Auswahl an Beispielen ... Yahoo! Store wurde von Paul Graham geschrieben, der ein großer Lisp-Anwalt ist. Er schrieb auch Hacker News, einen Reddit-Klon. Vermutlich wurde HN als Reaktion auf Reddits Wechsel von Lisp zu Python geschrieben, während die Reddit-Leute Teil von YCombinator waren: einem Beschleunigerprogramm, das von Paul Graham ausgeführt wird. Ich würde dies als EIN Beispiel betrachten, nicht als drei.
Brandon Bloom
Die @ ServermPendley-Serverkonfiguration, die Netzwerkeinrichtung und der Datenbankzugriff sind ebenfalls wichtige Faktoren für die Leistung. Die Skriptausführungszeiten von Web-Apps machen normalerweise einen winzigen Bruchteil der Gesamtkosten aus.
AgmLauncher
62

Die funktionale Programmierung passt sehr gut zu Web-Apps. Die Web-App empfängt eine HTTP-Anfrage und erzeugt ein HTML-Ergebnis. Dies kann als Funktion von Anforderungen an Seiten betrachtet werden.

Vergleichen Sie dies mit Desktop-Apps, bei denen wir normalerweise einen lang laufenden Prozess, eine zustandsbehaftete Benutzeroberfläche und einen Datenfluss in verschiedene Richtungen haben. Dies ist besser für OO geeignet, die sich um Objekte mit Status- und Nachrichtenübermittlung kümmern.

JacquesB
quelle
20

Ich verstehe nicht, warum nicht - solange Sie Browsern standardkonformes HTML bereitstellen, ist es ihnen egal, was Sie für die Erstellung verwendet haben, sei es eine funktionale Sprache, eine zwingende Sprache oder trainierte Affen.

Sherm Pendley
quelle
20

Reine funktionale Programmierung passt möglicherweise nicht sehr gut in die Webprogrammierumgebung. Das Haupthindernis ist jedoch nur der Mangel an Infrastruktur (Frameworks und APIs). Es wird lange dauern (wahrscheinlich nie, ehrlich gesagt), bis eine funktionale Sprache eine so reichhaltige Webprogrammierumgebung wie Java, Python oder Ruby hat.

Das heißt, es gibt einige Optionen.

Ich habe keine Erfahrung mit diesen. Vielleicht können Kommentatoren abwägen, was für sie gut funktioniert hat.

Chris Conway
quelle
4

Für Clojure gibt es ein interessantes Startup (TheDeadline), das mit Clojure und Google App Engine entwickelt wurde. Sie haben einen guten Ppt auf Slideshare und ein Interview auf InfoQ.

Eine gute Diskussion zur Bereitstellung von Clojure mit GAE finden Sie unter: http://news.ycombinator.com/item?id=1239788

Soweit ich weiß, verfügt Clojure über einige Webentwicklungsbibliotheken. Compojure Ring Conjure

Hoffe das beantwortet einige deiner Fragen =) (Ich fange gerade erst an ..)

Am besten, Ryan

Ryan Teo
quelle
3

Es hat nichts mit der Webentwicklung zu tun. Die App auf dem Server kann sehr gut funktionale Funktionen wie Schließungen, Funktionen höherer Ordnung, Unveränderlichkeit, referenzielle Transparenz nutzen. Sie verfügen beispielsweise über Sammlungen, die Sie auf irgendeine Weise transformieren oder bearbeiten müssen. Funktionale Programmierung hilft hier, und das aus einem Grund, dass ihre Redewendungen die gängigen Sprachen durchdringen. Funktionsmerkmale helfen bei der Prägnanz, Testbarkeit und Parallelisierung und bieten auch native Lösungen für Probleme, die Sie sonst mit Mustern lösen würden.

Update: Es gibt auch Web-Frameworks für funktionale Sprachen. Weblocks für Common Lisp, Lift für Scala. Dies sind diejenigen, von denen ich gehört habe, es könnte noch mehr geben ... aber Sie müssen nicht unbedingt rein funktional sein - zum Beispiel ist Scala nicht rein und sollte mit jedem Java-Framework funktionieren, wären Sie immer noch in der Lage funktionale Programmierung für die Business-Ebene usw. zu verwenden.

Deutsche
quelle
3

Schauen Sie sich Ur / Web an . Es ist sehr schnell und sein statisches Typsystem kennt sich mit HTML und SQL aus, sodass es alle möglichen netten Sicherheitsaspekte garantieren kann.

Cyrus Omar
quelle
3

Erlang scheint in einigen Infrastrukturen für skalierbare Web-Apps viel Verwendung zu finden. Die CouchDB- und Riak-Datenbanken sind hauptsächlich in Erlang geschrieben, ebenso wie der RabbitMQ-Nachrichtenwarteschlangenserver. Einer der Schlüssel zum Erfolg ist, dass die Parallelität durch Nachrichtenübermittlung ohne gemeinsamen veränderlichen Status verarbeitet wird. Es ist diese Art, über Probleme nachzudenken, die nützlicher ist als jede bestimmte funktionale Programmiersprache.

Oder schauen Sie sich MapReduce an. Es ist eine sehr funktionale Art, die Berechnung zu betrachten, selbst wenn Ihre Karten- und Reduzierungsfunktionen intern statusbehaftet sind. Aus diesem Grund eignet es sich sehr gut, um große Datenmengen fehlertolerant und verteilt abzufragen.

Gehen Sie auf jeden Fall mit dem, was Ihnen am praktischsten erscheint. Behalten Sie die funktionale Programmierung jedoch immer im Hinterkopf, da Sie nie wissen, wann sie sich als nützlich erweisen könnte.

Peter Scott
quelle
2

Sprache und Paradigma spielen für Web-Apps keine Rolle, sie sind alle gleich gut und schlecht. Wenn Sie nach einem Grund suchen, ein neues Paradigma zu lernen, tauchen Sie einfach ein. Mein Rat wäre, das Problem, das Sie lösen möchten, zu analysieren und das geeignete Toolset auszuwählen.

Chuck McKnight
quelle
2

Javascript (die Sprache des FE-Teils des Webs und zunehmend auch des BE) ist per se nicht funktionsfähig, aber Funktionen sind funktionsfähig erster Ordnung

Marcus Westin
quelle
2

Wir haben gerade eine Online-Tabelle gestartet, in der das Backend vollständig in Erlang geschrieben ist.

http://hypernumbers.com

Nach allen Maßstäben ist dies eine der komplexesten Web-Apps, die Sie mit einer gigantischen Benutzeroberfläche mit mentaler Komplexität erstellen können.

Gordon Guthrie
quelle
2

Hier ist eine Erfahrung von Webentwicklern beim Erstellen von Web-Apps mit Haskell . Obwohl funktionale Sprachen sehr typsicher sind und eine gute Parallelität aufweisen, fehlten ihnen immer die besten APIs der Rasse, da sie seit langem der Liebling der Wissenschaft sind und in der realen Welt noch nicht stark angenommen werden. Ich hoffe es ist nicht zu weit weg. Erlang hatte sich bereits darauf eingelassen.

A_Var
quelle
1

Der Grund, warum funktionale Programmierung bei der Webprogrammierung beliebt ist, besteht darin, dass sie den gemeinsamen und sich ändernden Zustand erklärt und es dem Programmierer ermöglicht, die rein funktionalen Teile als reine Funktionen auszudrücken. Reine Funktionen haben den Vorteil, dass sie sehr einfach parallel ausgeführt werden können, da sie keine Nebenwirkungen haben.

Zumindest ist das mein Grund.

rbanffy
quelle
1

Eine weitere kurze Antwort: http://www.mlstate.com - eine vollständige Webentwicklungsplattform, die auf FP basiert. Die saubere Semantik der Sprache ermöglicht alle Arten von automatisierten Sicherheitsanalysen, Optimierungen usw.

Vorsichtsmaßnahme: Ich arbeite dort.

Yoric
quelle
1

Funktionale Sprachen sind möglicherweise nicht direkt nützlich für die Erstellung großartiger Apps, aber wir verwenden das Paradigma der funktionalen Programmierung stark für die Erstellung unserer Apps. Bei der reinen funktionalen Programmierung gilt die Einschränkung "keine Nebenwirkungen". Dies stellt sicher, dass reine Funktionsaufrufe das gleiche Ergebnis in der Reihenfolge liefern, in der sie aufgerufen werden. Dies ist nicht ideal für die Webentwicklung, aber wenn funktionale Programmierung mit einem System zur Zustandsänderung kombiniert wird, kann eine robuste Web-App erstellt werden. Weitere Informationen finden Sie in meinem Artikel: FAST Server Auch diese Folien .

gopi
quelle
0

Ja, da die funktionale Programmierung in jeder Sprache erfolgen kann, können Sie sie täglich als Webentwickler verwenden.

Sollten Sie? Es hängt von dem Problem ab, das Sie lösen. Funktionale Programmierung ist ein Programmierparadigma, und wo Sie es verwenden sollten, hängt von dem Problem ab, das Sie lösen.

Überlegen Sie sich zur Vereinfachung der Entscheidung, ob es einfacher ist, ein Problem mithilfe von OOP-Konzepten zu lösen, bei denen Kapselung, Polymorphismus und vererbungsähnliche Funktionen Ihr Leben erleichtern können.

Wenn ja, gehen Sie dort nicht zur funktionalen Programmierung und verwenden Sie einfach OOPs. Wenn Ihre Anwendung komplexe Berechnungen / Berechnungen / Geschäftslogiken ausführen und eine stark gleichzeitige Verarbeitung beinhalten soll, kann die funktionale Programmierung in solchen Fällen viele Tools und Vorteile bieten.

Dies sind nur verschiedene Arten des Aufbaus der Struktur und der Elemente von Programmen. Es geht also darum, das richtige Werkzeug für den richtigen Job zu verwenden. Alles kann mit allem erledigt werden.

Funktionale Programmierung in der Webentwicklung:

JavaScript unterstützt die funktionale Programmierung und ist im Kontext der Webentwicklung sehr hilfreich. Das React Framework wird stark von den Prinzipien der funktionalen Programmierung beeinflusst und in vielen Webanwendungen verwendet.

Außerdem finden Sie viele Webanwendungen, die mit Frameworks erstellt wurden und ausgeführt werden, die auf den unten aufgeführten funktionalen Programmiersprachen entwickelt wurden:

• WebSharper (F #)

• Schnappen (Haskell)

• Heben Sie (Scala)

• Ocsigen (OCaml)

• Chicago Boss, Zotonic (erLang)

Hoffe also meine Antwort wird jedem helfen.

Amit Agrawal
quelle
-2

Sie werden es wahrscheinlich nicht verwenden und sollten es auch nicht verwenden, aber wenn Sie sagen, dass jemand immer eine Ausnahme von der Regel findet (Viaweb usw.). Grundsätzlich gibt es keine "Supersprache", es gibt nur funktionierende Codezeilen, normalerweise in "Blub". Sogar Paul Graham sagt, dass der Hauptvorteil (tatsächlich nur) eines Lisp die Fähigkeit ist, schnell Prototypen zu erstellen.

Auch "Supersprachen" beeinträchtigen normalerweise die Lesbarkeit des Codes, anstatt sie zu verbessern, was bedeutet, dass das eine "Genie", das ihn geschrieben hat, ihn für immer beibehalten muss, da niemand sonst ihn verstehen kann, insbesondere weil er ihn wahrscheinlich in seinem eigenen modifizierten Dialekt schreibt. Dies verringert den möglichen Umfang eines Projekts, was bedeutet, dass selbst wenn neue, innovative Dinge getan werden können, diese nicht erweiterbar sind und daher relativ klein bleiben (wie Hacker News in Arc).

Das heißt nicht, dass jemand keine geniale Idee haben und sie in einem unverständlichen Stil umsetzen kann, der dann in Blub neu geschrieben und erweitert werden kann, damit viele Menschen davon profitieren können. Genau das ist in allen Lisp-Erfolgsgeschichten passiert, ganz zu schweigen von jedem berühmten Philosophen, der jemals gelebt hat. Aber wenn Sie ein "Genie" sind, können Sie Ihr Produkt natürlich auch auf andere Weise prototypisieren.

Was FP auf der JVM betrifft, sind begrenzte, aber coole Dinge möglich. Obwohl ich es persönlich nur für das Prototyping verwenden würde, ist es möglich, dass Sie einen Anwendungsfall haben (normalerweise etwas, der mit Multithreading zu tun hat), in dem es einige Verbesserungen bietet.

Joel
quelle
1
Tatsächlich sagt Paul Graham, dass Lisps großer Vorteil darin besteht, dass es "die mächtigste" Sprache ist, die es gibt. Er unterstützt seine Argumentation damit, dass etwa ein Viertel des Viawebs (nach Zeilen) Lisp-Makros waren. Die Metaprogrammierung in den meisten Sprachen (insbesondere in den Mitte der 90er Jahre) ist schwierig. Es ist kein Prototyp, wenn er auf den Produktionsserver übertragen wird.
Nmichaels