3 Stimmen

Was sind die Vor- und Nachteile der verschiedenen funktionalen Sprachen?

Ich kenne mehrere funktionale Sprachen - F#, Lisp und seine Dialekte, R, und andere. Da ich jedoch noch nie eine von ihnen benutzt habe (obwohl die drei genannten auf meiner "zu lernenden" Liste stehen), frage ich mich nach den Vor- und Nachteilen der verschiedenen funktionalen Sprachen da draußen. Gibt es signifikante Vor- und Nachteile, sowohl beim Erlernen der Sprache als auch bei realen Anwendungen der besagten Sprache?

3voto

Doug Currie Punkte 39584

Haskell ist "extrem" (faul, rein), hat aktive Benutzer, viel Dokumentation und macht lauffähige Anwendungen.

SML ist "weniger extrem" (streng, unrein), hat aktive Nutzer, eine formale Spezifikation und viele Implementierungen (SML/NJ, Mlton, Moscow ML usw.). Die Implementierungen unterscheiden sich darin, wie die Anwendungen in Bezug auf die Laufzeiten eingesetzt werden.

OCaml ist ML mit Haltung. Es hat eine Objektorientierung, aktive Benutzer, Dokumentation, Zusatzprogramme und macht lauffähige Anwendungen.

Erlang ist nebenläufig, strikt, rein (meistens) und unterstützt verteilte Anwendungen. Es benötigt eine separat installierte Laufzeitumgebung, so dass sich die Bereitstellung von den Sprachen unterscheidet, die lauffähige Binärdateien erstellen.

F# ist ähnlich wie OCaml mit Microsoft-Unterstützung und .NET-Bibliotheken.

Scala läuft auf der JVM und kann als funktionale Sprache mit fortgeschrittenen Funktionen oder einfach als aufgemotztes Java verwendet werden, oder beides. Die Flexibilität wird als Nachteil genannt für Lernen eine funktionale Sprache, weil es leicht ist, wieder in imperative Java-Methoden zu verfallen. Natürlich ist es auch von Vorteil, wenn Sie vorhandene JVM-Bibliotheken verwenden möchten.

2voto

MichaelGG Punkte 9900

Ich bin nicht sicher, ob sich Ihre Frage auf funktionale Sprachen im Allgemeinen oder auf die Unterschiede zwischen ihnen bezieht. Für allgemeine Informationen darüber, warum funktional:

http://paulspontifications.blogspot.com/2007/08/no-silver-bullet-and-functional.html

Warum funktionale Programmierung wichtig ist

Was die Unterschiede zwischen funktionalen Sprachen angeht:

Charakteristische Merkmale der funktionalen Sprachen

Das Tolle an funktionalen Sprachen ist, dass sie sich auf das Lambda-Kalkül und andere mathematische Verfahren stützen. Das führt dazu, dass man ähnliche Algorithmen und Gedanken in verschiedenen Sprachen leichter verwenden kann.

Was die Frage betrifft, welche Sie lernen sollten: Suchen Sie sich eine aus, die für Sie eine angenehme Umgebung bietet. Wenn Sie zum Beispiel .NET und Visual Studio verwenden, ist F# eine ausgezeichnete Wahl. (Eigentlich macht die VS-Integration F# zu einem starken Konkurrenten, Punkt.) Das Buch " Wie man Programme entwirft " (Volltext, kostenlos, online) mit PLT Scheme ist ebenfalls eine gute Wahl.

Ich bin voreingenommen, aber F# scheint das größte Potenzial für die "reale Welt" zu haben. Das liegt vor allem an der guten IDE/.NET-Integration, die es Ihnen ermöglicht, .NET und OO voll auszuschöpfen und gleichzeitig eine Menge funktionaler Möglichkeiten zu behalten (und diese auch zu erweitern). Scala könnte ein möglicher Konkurrent sein, aber es ist eher eine OO-Sprache, die einige funktionale Funktionen hat; daher wird Scala keinen so großen Produktivitätsgewinn bringen.

Edit: Nur um JavaScript und Ruby zu erwähnen, bevor das jemand kommentiert :). Ruby ist etwas anderes, das Sie sich ansehen könnten, wenn Sie diese Art von Web-Entwicklung betreiben, da es viele funktionale Konzepte enthält, obwohl es nicht so ausgefeilt ist wie andere Sprachen.

Der größte Nachteil ist, dass Sie, wenn Sie erst einmal gesehen haben, welche Möglichkeiten Sie haben, nicht mehr mit weniger guten Sprachen zufrieden sein werden. Das wird zum Problem, wenn man mit Leuten zu tun hat, die das noch nicht verstanden haben.

Eine letzte Bemerkung: Der einzige "Nachteil" ist, dass es "so kompliziert" ist. Das stimmt eigentlich nicht - funktionale Sprachen sind oft einfacher - aber wenn man jahrelang C oder ähnliches im Kopf hat, kann es eine große Hürde sein, das funktionale Konzept zu "verstehen". Wenn es dann Klick gemacht hat, sollte es relativ einfach sein.

1voto

John D. Cook Punkte 28817

Lisp hat eine leichte Lernkurve. Sie können die Grundlagen in einer Stunde lernen, obwohl es natürlich länger dauert, Idiome usw. zu lernen. Nachteilig ist, dass es viele Dialekte von Lisp gibt und dass es schwierig ist, mit Mainstream-Umgebungen wie Java oder .NET zu interagieren.

Ich würde R nicht empfehlen, es sei denn, Sie müssen Statistiken erstellen. Es ist eine seltsame Sprache und nicht gerade funktional. Man kann in R funktional programmieren, aber die meisten Leute tun das nicht.

Wenn Sie mit dem Microsoft-Toolstack vertraut sind, dürfte der Einstieg in F# einfach sein. Und es hat eine riesige, gut getestete Bibliothek dahinter, d.h. die CLR.

Sie können einen funktionalen Programmierstil in jeder Sprache verwenden, auch wenn einige Sprachen dies einfacher machen als andere. Was das angeht, könnten Sie Python ausprobieren.

0voto

user57697 Punkte 368

ML-Familie (SML/OCaml/F#):

Vorteile:

  • Ziemlich einfach
  • über effektive Implementierungen verfügen (auf dem Niveau von Java/C#)
  • Leicht vorhersehbarer Ressourcenverbrauch (im Vergleich zu lazy languages)
  • Lesbare Syntax
  • Starkes Modulsystem
  • (Für F#): große .Net-Bibliothek verfügbar
  • Hat veränderbare Variablen

Nachteile:

  • Manchmal zu einfach (keine Typklassen => Probleme mit Überladung)
  • (Außer F#): Standardbibliotheken fehlen einige nützliche Dinge
  • Hat veränderbare Variablen :)
  • Es kann keine unendlichen Datenstrukturen geben (keine faule Sprache)

Ich habe nicht erwähnt, was die meisten statisch typisierten funktionalen Sprachen gemeinsam haben: Typinferenz, parametrischer Polymorphismus, Funktionen höherer Ordnung, algebraische Datentypen und Mustervergleich.

0voto

mati Punkte 5048

Ich habe Haskell an der Universität als reine funktionale Sprache gelernt und ich kann sagen, dass es wirklich mächtig ist, aber auch ich konnte keine praktische Anwendung finden.

Aber ich habe das hier gefunden: Haskell in der Praxis . Überprüfen Sie es, ist erstaunlich.

Die Merkmale funktionaler Paradigmen sind je nach Situation/Kontext manchmal Vor- und manchmal Nachteile. Einige von ihnen sind:

  • hohes Niveau
  • Lambda-Funktionen
  • faule Bewertung
  • Funktionen höherer Ordnung
  • Rekursion
  • Typenzuweisung

Zitiert aus wikipedia:

Fragen der Effizienz

Funktionale Programmiersprachen haben wurden als weniger effizient in der Nutzung von CPU und Speicher als imperative Sprachen wie C und Pascal.[26] Für Programme jedoch, die intensive numerische Berechnungen durchführen Berechnungen durchführen, sind funktionale Sprachen wie OCaml und Clean eine ähnliche Geschwindigkeit Geschwindigkeit mit C. Für Programme, die mit großen Matrizen und mehrdimensionalen Datenbanken arbeiten, sind Array funktionale Sprachen (wie J und K) wurden mit Blick auf Geschwindigkeitsoptimierung entwickelt im Sinn.

Reine funktionale Sprachen haben eine den Ruf, langsamer zu sein als imperative Sprachen. Die Unveränderlichkeit der Daten kann jedoch in vielen Fällen zu einer effizienteren Ausführung Ausführungseffizienz führen, indem sie dem Compiler die Möglichkeit gibt Annahmen zu treffen, die in einer imperativen Sprache unsicher imperativen Sprachen unsicher sind, was die Möglichkeiten für Inlining.

Eine faule Auswertung kann auch die Geschwindigkeit der Programm beschleunigen, sogar asymptotisch, während es höchstens um einen konstanten Faktor verlangsamen kann konstanten Faktor verlangsamen kann (allerdings kann es Speicherlecks verursachen, wenn sie unsachgemäß verwendet).

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