it-swarm-eu.dev

Haskell vs Erlang für Webdienste

Ich möchte ein experimentelles Projekt mit einer funktionalen Sprache starten und versuche mich zwischen Erlang und Haskell zu entscheiden. Beide haben einige Punkte, die mir wirklich gefallen.

Ich mag Haskells starkes Typensystem und seine Reinheit. Ich habe das Gefühl, es wird einfacher, wirklich zuverlässigen Code zu schreiben. Und ich denke, dass die Kraft von Haskell einige meiner Aufgaben viel einfacher machen wird.

Auf der negativen Seite habe ich das Gefühl, dass einige der Frameworks für Web-Sachen auf Haskell wie Yesod nicht so fortgeschritten sind wie ihre Erlang-Gegenstücke.

Ich mag eher den Erlang-Ansatz für Threads und Fehlertoleranz. Ich habe das Gefühl, dass die Skalierbarkeit von Erlang ein großes Plus sein könnte.

Was zu meiner Frage führt, welche Erfahrungen die Leute mit der Implementierung von Webanwendungs-Backends in Haskell und Erlang gemacht haben. Gibt es Pakete für Haskell, um einige der leichtgewichtigen Threads und Schauspieler bereitzustellen, die man in Erlang hat?

29
Zachary K

Die einzige Frage, die ich habe, ist, was macht Ihr Webdienst? Wenn der Webdienst wirklich ein Funktionsproblem darstellt, ist Haskell besser geeignet.

Erlang ist nicht unbedingt eine funktionale Sprache. Es ist eine prozedurale Sprache mit einem sehr starken Ausführungsmodell für massiv parallele Systeme. Es wurde für die Telekommunikationsbranche entwickelt und eignet sich auf jeden Fall hervorragend für die Beantwortung von Webdienstanfragen.

Siehe diese Seite * für eine Übersicht über die Unterschiede zwischen prozeduraler und funktionaler Programmierung. (Entschuldigung im Voraus für das hässliche Schwarz auf der Cyan-Seite).

Wenn Ihr Webdienst eine angemessene Menge an Musterabgleich durchführt und Regeln anwendet, ist Haskell Ihre Wahl. Wenn Sie nur eine skalierbare Infrastruktur wünschen, die sich nicht zu stark von den Sprachen unterscheidet, die Sie wahrscheinlich bereits kennen, wählen Sie Erlang.

(* Link über Wayback-Maschine. Die Originaldatei wurde entfernt)

19
Berin Loritsch

Zwischen den beiden, die Sie erwähnen, ist Haskell definitiv akademisch, während Erlang in realen Projekten mit hoher Skalierbarkeit verwendet wird. Von den beiden für Webdienste würde ich Erlang wählen.

Aber ich würde sagen, Sie haben die dritte Wahl: Scala , eine Sprache, die sowohl von Haskell als auch von Erlang stark beeinflusst wird. Es wird verwendet, um erstklassige Webdienste wie Twitter oder Foursquare zu erstellen. Es gibt sogar Lift , ein Webframework, das von Rails und Django, obwohl mit) inspiriert wurde Ein etwas anderer, funktionalerer Ansatz. Foursquare verwendet Lift.

10
vartec

Normalerweise sage ich: "Lerne Dinge so weit wie möglich aus deiner Komfortzone heraus, es macht dich zu einem besseren Programmierer, selbst wenn du es nie in der Praxis verwendest.".

In diesem Fall könnte das wahrscheinlich Haskell bedeuten; aber Erlang wird nicht nur fast sozial akzeptabel; Die Hauptpunkte (Lichtprozesse, Nachrichtenübermittlung, enorme Skalierbarkeit) kommen jedoch auf vielen anderen „praktischen“ Plattformen zum Tragen, sodass die gewonnenen Erkenntnisse eine große und unmittelbare Anwendbarkeit auf mehr „echte“ Arbeit haben.

mein Rat: Wenn es Spaß macht, mach Haskell. Wenn es für das Training ist, gehen Sie Erlang.

6
Javier

Haskell (GHC) unterstützt sofort einsatzbereite grüne Threads (Erlangs "Prozesse"). Zum Beispiel erzeugt forkIO einen neuen grünen Thread und gibt seine Thread-ID zurück.

forkIO :: IO () -> IO ThreadId

der Nachrichtenübermittlungsmechanismus wird vom Paket verteilter Prozess implementiert, ist jedoch nicht sehr gut gepflegt.
Haskells Datenaustauschmechanismus unterscheidet sich von Erlang. Haskell befürwortet die Idee veränderlicher globaler Staaten und fügt Abstraktionen hinzu, um die Verwendung sicher zu machen. Ein Paradebeispiel hierfür ist TVar ( [~ # ~] t [~ # ~] ransactioal Var iable), das zusammensetzbare atomare Transaktionen ermöglicht .
Haskell verfügt auch über einige Webdienstbibliotheken auf sehr hoher Ebene, die sein Ausdruckstypsystem (abhängige Typen) verwenden, z. B. Servant. Hier können Sie Ihre REST API) mithilfe von DSL auf Typebene angeben, die zur Kompilierungszeit verwendet werden kann, um die Typensicherheit zu gewährleisten.

Bearbeiten:
anscheinend verteilter Verschluss implementiert auch Verschlussserialisierung mit Hilfe von staticptr

1
Poscat

Sie könnten auch Rust in Betracht ziehen.

  • Es ist nicht rein funktional, sondern fördert einen semi-funktionalen Stil
    • Verschlüsse
    • Unveränderlichkeit standardmäßig
    • Es verfügt über ein starkes, sicheres Makrosystem, mit dem Sie Makros schreiben (oder vorhandene, von der Community erstellte) verwenden können, um Code in einem funktionaleren Stil zu schreiben
  • Es verfügt über Bibliotheken/Frameworks für jede Abstraktionsebene
  • Es hat einen starken Schwerpunkt auf effiziente Speichersicherheit
  • Es hat ein starkes Typensystem
  • Es macht alle Arten von Parallelität wirklich einfach (solange Sie alle Sicherheitsanforderungen erfüllen)
  • Es hat eine große aktive Gemeinschaft
  • Es ist Open Source (wie die anderen, die Sie erwähnt haben)
  • usw.
0
Solomon Ucko