Haskell ist der ML-Sprachfamilie am nächsten verwandt. Dazu gehört natürlich OCaml , aber auch F # auf der .NET-Plattform. Diese Sprachen teilen mit Haskell die Grundlage des Typsystems und die Art und Weise, wie Daten verwendet werden - algebraische Datentypen, Mustererkennung, Typinferenz usw. Sie können sich natürlich in anderen Punkten erheblich von Haskell unterscheiden - die meisten MLs sind streng und unrein Zunächst einmal bedeutet die Popularität von Haskell als Forschungsinstrument für Schriftsysteme und Sprachdesign, dass die meisten ML-ähnlichen Sprachen in der Regel weniger leistungsfähige (aber möglicherweise besser verständliche) Schriftsysteme aufweisen. Es ist wahrscheinlich sicher zu sagen, dass, während Sie vermissen könnenEinige Dinge über Haskell, vor allem am Anfang, würden sich die meisten Haskell-Programmierer in einer ML wahrscheinlich ziemlich schnell wohlfühlen, wenn sie grundlegende Dinge erledigen. Wenn Sie eine Sprache mit der gleichen Gesamtstruktur wie Haskell wünschen , ist eine ML die beste Wahl.
Die funktionale Seite von Scalastützt sich auch stark auf die ML-Tradition und greift auch auf einige von Haskell bekannte fortschrittliche Systemmerkmale sowie ein standardisiertes OOP-System zurück, das in das oben Gesagte integriert ist. Während OO in ML-ähnlichen Sprachen eher als "Modell-OO mit grundlegenden Funktionswerkzeugen" betrachtet wird, lebt und atmet Scala OO im Java-Stil. Wie Sie sich vorstellen können, bietet dies Vorteile für Java Interop und eine vertraute Arbeitsumgebung für OO-Programmierer. Wenn Sie jedoch einen Haskell-Hintergrund haben, ärgern Sie sich mit größerer Wahrscheinlichkeit darüber, dass das Zusammenführen von Dingen in Scala die funktionalen Redewendungen ungeschickter macht und die meisten Java-APIs als schlecht gestaltet und unnötig schwierig zu verwenden sind.
Obwohl es seltsam erscheinen mag, hat Clojure tatsächlich eine Menge Dinge mit Haskell auf einer philosophischeren Ebene gemeinsam. Das meiste, was Sie in Clojures Herangehensweise an Zustand und Werte im Vergleich zu Identitäten finden, ist sehr ähnlich dem, was Haskell durch das Typensystem formalisiert. Entsprechend betont Clojure Java-Interop in geringerem Maße und kümmert sich nicht so sehr um das Ziehen in OOP, sodass Clojures Ansatz zur funktionalen Programmierung in gewisser Weise dem am nächsten kommt, mit dem Sie bereits vertraut sind. Ich denke, diesbezüglich ist es bezeichnend, dass Clojure meines Wissens die einzige Sprache neben Haskell ist, die eine Implementierung von STM hatDas ist einfach, effektiv und funktioniert einfach. Auf der anderen Seite stammt Clojure aus der Lisp-Tradition und verfügt daher nicht über das statische Typsystem und die Betonung der algebraischen Datentypen und der Musterübereinstimmung, die in ML-beeinflussten Sprachen zu finden sind. Und natürlich ist es ein Lisp, was sich für manche Leute negativ auswirkt (obwohl ich wirklich nicht weiß warum).
Wenn ich für mich selbst spreche, mit dem Hinweis, dass meine erste Erfahrung mit funktionaler Programmierung im Schema lag, würde ich mich wahrscheinlich Clojure zuwenden, wobei OCaml wahrscheinlich die zweite Wahl ist.
Ich habe es selbst nie benutzt, aber ich sehe, dass Scala manchmal in Blogs oder Projektbeschreibungen auftaucht, und ich glaube, es hat wichtige Konzepte von Haskell übernommen. Scala wird bis zur JVM kompiliert und kann mit Java zusammenarbeiten.
quelle
Eine funktionale Alternative ist Erlang . Obwohl es sich um eine sehr konkurrierende Sprache handelt, handelt es sich bei der sequentiellen Teilmenge um eine reine Funktionssprache mit vielen Eigenschaften von Funktionssprachen, z. B. Closures, unveränderlichen Daten und Pattern Matching. Es läuft auf vielen Plattformen, einschließlich Linux, verschiedenen Unixen, Windows und MacOSX. Es gibt jetzt sogar eine Implementierung für die JVM, erjang . Es kann leicht mit anderen Sprachen kommunizieren und koexistieren, so wird es oft verwendet.
Schauen Sie sich die Hauptseite an .
quelle
Clojure wird immer häufiger verwendet, und obwohl es auf oberflächlicher Ebene nicht wie Haskell aussieht, ist es, wenn Sie ein bisschen tiefer schauen, eindeutig stark von Haskell inspiriert und fördert einen sehr ähnlichen funktionalen Stil.
Wichtige Clojure-Funktionen, die Haskell-Benutzer möglicherweise kennen und ansprechen:
Hauptunterschiede (können positiv oder negativ sein, abhängig von Ihrer Perspektive):
Persönliche Perspektive: Ich habe Haskell vor Clojure gelernt und Haskell wegen seiner Eleganz und mathematischen Reinheit geliebt. Clojure schöpft viel Inspiration und leiht sich viele gute Features von Haskell, ist aber eine viel pragmatischere / praktischere Sprache. Vor allem, wenn Sie den enormen Wert der Nutzung des Java-Bibliotheks-Ökosystems schätzen, ist dies eine großartige Sprache für die Erledigung von Aufgaben.
quelle
Wenn Sie Haskell mögen, aber Code für die JVM erstellen müssen, könnte frege für Sie interessant sein. Es ist so konzipiert, dass es Haskell 2010 möglichst nahe kommt, generiert jedoch Java-Code.
Natürlich ist frege an sich nichts anderes als "weit verbreitete Produktionssprache" (die erst kürzlich veröffentlicht wurde), aber Java ist es mit Sicherheit.
quelle