346 Stimmen

Warum funktionale Sprachen?

Ich sehe, dass hier viel über funktionale Sprachen und so geredet wird. Warum würden Sie eine solche gegenüber einer "traditionellen" Sprache verwenden? Was können sie besser? Worin sind sie schlechter? Wie sieht die ideale Anwendung der funktionalen Programmierung aus?

223voto

Mendelt Punkte 35649

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 macht vieles schwieriger (oder in den meisten Fällen anders, als man es gewohnt ist).

Einer der größten Vorteile der funktionalen Programmierung besteht darin, dass die Reihenfolge der Ausführung von Funktionen ohne Seiteneffekte nicht wichtig ist. In Erlang wird dies zum Beispiel genutzt, um Gleichzeitigkeit auf sehr transparente Weise zu ermöglichen. Und da 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 Seiteneffekten. Es ist sehr schwierig, nützliche Software ohne IO zu schreiben, aber IO ist ohne Seiteneffekte in Funktionen schwer zu implementieren. Die meisten Leute haben also nie mehr aus der funktionalen Programmierung herausgeholt als die Berechnung einer einzigen Ausgabe aus einer einzigen Eingabe. In modernen Mixed-Paradigm-Sprachen wie F# oder Scala ist dies einfacher.

Viele moderne Sprachen enthalten Elemente aus funktionalen Programmiersprachen. C# 3.0 hat viele Funktionen der funktionalen Programmierung und man kann auch in Python funktional programmieren. Ich denke, dass die Popularität der funktionalen Programmierung vor allem auf zwei Gründe zurückzuführen ist: Die Gleichzeitigkeit wird zu einem echten Problem in der normalen Programmierung, weil wir immer mehr Multiprozessor-Computer bekommen, und die Sprachen werden immer zugänglicher.

202voto

joel.neely Punkte 30189

Ich glaube nicht, dass sich der funktionale Ansatz für die Programmierung durchsetzen wird, denn er ist (als Programmierstil) seit etwa 40 Jahren in Gebrauch. Wann immer ein OO-Programmierer sauberen Code schreibt, der unveränderliche Objekte bevorzugt, nimmt dieser Code Anleihen bei funktionalen Konzepten.

Allerdings sind Sprachen, die durchsetzen. Ein funktionaler Stil wird heutzutage mit viel virtueller Tinte beschrieben, und es ist eine offene Frage, ob sich diese Sprachen in Zukunft durchsetzen werden. Ich selbst habe den Verdacht, dass hybride, multiparadigmatische Sprachen wie Scala o OCaml wird wahrscheinlich über "puristische" funktionale Sprachen dominieren, so wie reine OO-Sprachen (Smalltalk, Beta usw.) die Mainstream-Programmierung beeinflusst haben, aber nicht zu den am weitesten verbreiteten Notationen geworden sind.

Abschließend kann ich nicht umhin, darauf hinzuweisen, dass Ihre Bemerkungen zu FP in hohem Maße mit den Bemerkungen übereinstimmen, die ich vor nicht allzu vielen Jahren von Verfahrensprogrammierern gehört habe:

  • Der (mythische, IMHO) "durchschnittliche" Programmierer versteht es nicht.
  • Es ist nicht weit verbreitet.
  • Jedes Programm, das Sie damit schreiben können, kann mit den heutigen Techniken auch anders geschrieben werden.

Genauso wie grafische Benutzeroberflächen und "Code als Geschäftsmodell" Konzepte waren, die dazu beigetragen haben, dass OO mehr geschätzt wird, glaube ich, dass die zunehmende Verwendung von Unveränderlichkeit und einfacherer (massiver) Parallelität dazu beitragen wird, dass mehr Programmierer die Vorteile erkennen, die der funktionale Ansatz bietet. Aber so viel wir auch gelernt haben in die letzten 50 Jahre oder so die die gesamte Geschichte der digitalen Computerprogrammierung ausmachen, denke ich, dass wir noch viel zu lernen haben. In zwanzig Jahren werden die Programmierer mit Erstaunen auf die primitive Natur der Werkzeuge zurückblicken, die wir heute benutzen, einschließlich die heute beliebten OO- und FP-Sprachen.

126voto

Steven Robbins Punkte 26083

Der Hauptvorteil ist für mich die inhärente Parallelität, vor allem, da wir uns jetzt von mehr MHz wegbewegen und zu immer mehr Kernen übergehen.

Ich glaube nicht, dass es das nächste Programmierparadigma werden und OO-Typ-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 werden mehr funktionale Konstrukte enthalten.

79voto

user21714 Punkte 5615

Selbst wenn Sie nie beruflich mit einer funktionalen Sprache arbeiten, wird das Verständnis der funktionalen Programmierung Sie zu einem besseren Entwickler machen. Es wird Ihnen eine neue Perspektive auf Ihren Code und die Programmierung im Allgemeinen geben.

Ich sage, es gibt keinen Grund, es nicht zu lernen.

Ich denke, dass die Sprachen, die funktionalen und imperativen Stil gut miteinander verbinden, am interessantesten sind und am ehesten Erfolg haben werden.

59voto

Norman Ramsey Punkte 193087

Ich bin immer skeptisch, wenn es um das nächste große Ding geht. Oft ist das "Next Big Thing" ein reiner Zufall der Geschichte, da es zur richtigen Zeit am richtigen Ort ist, unabhängig davon, ob die Technologie gut ist oder nicht. Beispiele: C++, Tcl/Tk, Perl. Allesamt fehlerhafte Technologien, die allesamt sehr erfolgreich waren, weil sie entweder als Lösung für die Probleme der Zeit oder als nahezu identisch mit etablierten Standards angesehen wurden, oder beides. Funktionale Programmierung mag in der Tat großartig sein, aber das bedeutet nicht, dass sie auch angenommen wird.

Aber ich kann sagen, warum die Menschen aufgeregt über funktionale Programmierung: Viele, viele Programmierer haben eine Art "Umstellungserfahrung" gemacht, bei der sie entdeckt haben, dass die Verwendung einer funktionalen Sprache sie doppelt so produktiv macht (oder vielleicht zehnmal so produktiv), während sie gleichzeitig Code produzieren, der widerstandsfähiger gegen Änderungen ist und weniger Fehler aufweist. Diese Leute betrachten die funktionale Programmierung als eine Geheimwaffe; ein gutes Beispiel für diese Denkweise ist Paul Grahams Die Durchschnittswerte übertreffen . Oh, und seine Anwendung? E-Commerce-Webanwendungen.

Seit Anfang 2006 gibt es auch einige Diskussionen über funktionale Programmierung und Parallelität. Da Leute wie Simon Peyton Jones seit mindestens 1984 immer wieder über Parallelität nachgedacht haben, halte ich nicht den Atem an, bis funktionale Sprachen das Multicore-Problem lösen. Aber es erklärt einiges von dem zusätzlichen Rummel, den es jetzt gibt.

Im Allgemeinen leisten die amerikanischen Universitäten bei der Vermittlung funktionaler Programmierung schlechte Arbeit. Es gibt einen starken Kern der Unterstützung für Einführung in die Programmierung mit Scheme und auch Haskell genießt dort eine gewisse Unterstützung, aber es gibt nur sehr wenig, was die Vermittlung fortgeschrittener Techniken für funktionale Programmierer betrifft. Ich habe einen solchen Kurs in Harvard unterrichtet und werde ihn in diesem Frühjahr an der Tufts University wieder anbieten. Benjamin Pierce hat einen solchen Kurs an der Penn unterrichtet. Ich weiß nicht, ob Paul Hudak etwas in Yale gemacht hat. Die europäischen Universitäten leisten viel bessere Arbeit; in Dänemark, den Niederlanden, Schweden und dem Vereinigten Königreich wird zum Beispiel an wichtigen Stellen Wert auf funktionale Programmierung gelegt. Ich habe weniger Ahnung davon, was in Australasien passiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X