Warum haben Sie sich gegen Erlang entschieden?


72

Haben Sie tatsächlich Erlang "ausprobiert" (bedeutet programmiert, nicht nur einen Artikel darüber gelesen) und sich für ein Projekt dagegen entschieden? Wenn ja warum? Wenn Sie sich dafür entschieden haben, zu Ihrer alten Sprache zurückzukehren oder eine andere funktionale Sprache wie F #, Haskell, Clojure, Scala oder etwas anderes zu verwenden, zählt dies ebenfalls und geben Sie an, warum.

Antworten:


49

Ich kehrte für meine persönlichen Projekte aus Erlang nach Haskell zurück, um die einfache Tugend von Haskells erstaunlichem Typensystem zu nutzen. Erlang bietet Ihnen eine Menge Werkzeuge, mit denen Sie umgehen können, wenn etwas schief geht. Haskell bietet Ihnen Tools, mit denen Sie verhindern können, dass Sie etwas falsch machen.

Wenn Sie in einer Sprache mit einem starken Typsystem arbeiten, beweisen Sie bei jeder Kompilierung effektiv freie Theoreme über Ihren Code.

Sie erhalten auch eine Menge überladenen Zuckers von Haskells Maschinen der Typklasse, aber das ist für mich weitgehend zweitrangig - auch wenn es mir erlaubt, eine Reihe von Abstraktionen auszudrücken, die in Erlang furchtbar ausführlich oder nicht idiomatisch und unbrauchbar wären (z. B. Haskells Kategorie-Extras).

Ich liebe Erlang, ich liebe seine Kanäle und seine mühelose Skalierbarkeit. Ich wende mich daran, wenn dies die Dinge sind, die ich brauche. Haskell ist kein Allheilmittel. Ich gebe ein besseres operatives Verständnis des Platzverbrauchs auf. Ich gebe den magischen One-Pass-Müllsammler auf. Ich gebe OTP-Muster und all diese mühelose Skalierbarkeit auf.

Aber es fällt mir schwer, die Sicherheitsdecke aufzugeben, die, wie allgemein gesagt, in Haskell, wenn sie typisiert, wahrscheinlich richtig ist.


2
Beachten Sie, dass Haskell nicht einmal den Zyklus zum Schreiben, Kompilieren und Ausführen benötigt, da es REPL unterstützt (z ghci. B. via ). Für mich vereint das das Beste aus den Welten der statischen (nur typisierten) und dynamischen Sprachen.
Konrad Rudolph

2
@Konrad Haskells REPL hat jedoch Grenzen. Zum einen können Sie keine dataDefinitionen darin schreiben . Sie müssen es in eine Datei schreiben und den REPL-Prozess ausführen lassen. Sowohl Ghci als auch Umarmungen.
Daniel C. Sobral

6
Guter Punkt! Ich habe gehört, dass es schwierig ist, Erlang ein Typsystem hinzuzufügen, hauptsächlich wegen des Hot Code Swap. Armstrong und Peyton Jones sprechen in diesem Interview über Typen in Haskell und Erlang: infoq.com/interviews/armstrong-peyton-jones-erlang-haskell
Jonas

2
@Sanoj: Danke, dass du das Interview verlinkt hast, es rockt. Ich lese gerade Seibels „Coders at Work“, in dem beide mitreden können, aber es ist einfach unglaublich, sie nebeneinander zu haben. Um ein / zu zitieren. Limerick: +5 (aufschlussreich) - xkcd.com/301
Konrad Rudolph

1
Was ist Ihre Meinung zu Dialysator und TypEr, wenn es um ein Typensystem in Erlang geht? Zugegeben, es ist nicht dasselbe (Erfolgstypisierung statt Hindley-Milner-Typinferenz), aber meiner Erfahrung nach leistet es gute Arbeit bei der Verhinderung von Softwarefehlern.
Ich gebe schreckliche Ratschläge 17.

26

Wir verwenden Haskell, OCaml und (jetzt) ​​F #, daher hat dies für uns nichts mit dem Mangel an C-ähnlicher Syntax zu tun. Vielmehr überspringen wir Erlang, weil:

  • Es ist dynamisch getippt (wir sind Fans von Haskells Schriftsystem)
  • Bietet keinen "echten" Zeichenfolgentyp (ich verstehe warum, aber es ist ärgerlich, dass dies auf Sprachebene noch nicht korrigiert wurde)
  • Neigt dazu, schlechte (unvollständige oder nicht gewartete) Datenbanktreiber zu haben
  • Es sind keine Batterien enthalten und es scheint keine Community zu geben, die daran arbeitet, dies zu korrigieren. Wenn ja, ist es nicht gut sichtbar. Haskell hat zumindest Hackage, und ich würde vermuten, dass wir diese Sprache vor jeder anderen wählen. In Windows-Umgebungen hat F # hier den ultimativen Vorteil.

Es gibt wahrscheinlich andere Gründe, an die ich momentan nicht denken kann, aber dies sind die Hauptpunkte.


1
Oh ja, viel - allerdings nie für eine Produktionsanwendung. Bei der Evaluierung einer neuen Technologie ist es hilfreich, zuerst einige interne Tools damit zu erstellen. Wir mögen Erlang und haben kein Problem damit, Produkte wie RabbitMQ auszuführen, bevorzugen jedoch die oben aufgeführten Technologien aus den bereits genannten Gründen.
Shaun

25

Der beste Grund, Erlang zu vermeiden, ist, wenn Sie sich nicht auf die funktionale Art der Programmierung festlegen können.

Ich habe vor ein paar Wochen einen Anti-Erlang-Blog-Rant gelesen, und einer der Kritikpunkte des Autors an Erlang ist, dass er nicht herausfinden konnte, wie eine Funktion jedes Mal, wenn er sie mit denselben Argumenten aufrief, einen anderen Wert zurückgibt. Was er wirklich nicht herausgefunden hatte ist, dass Erlang absichtlich so ist. Auf diese Weise kann Erlang auf mehreren Prozessoren ohne explizite Sperrung so gut ausgeführt werden. Rein funktionale Programmierung ist eine nebenwirkungsfreie Programmierung. Sie können Erlang dazu bringen, so zu arbeiten, wie es unser schimpfender Blogger wollte, und Nebenwirkungen hinzufügen, aber dabei den Wert, den Erlang bietet, wegwerfen.

Reine funktionale Programmierung ist nicht der einzig richtige Weg, um zu programmieren. Nicht alles muss mathematisch streng sein. Wenn Sie feststellen, dass Ihre Bewerbung am besten in einer Sprache verfasst ist, die den Begriff "Funktion" missbraucht, streichen Sie Erlang besser von Ihrer Liste.


2
rand()sorgt für eine interessante Studie im Funktionsdesign. Viele Standardfunktionen der C-Bibliothek sind unter anderem nicht wiedereintrittsfähig rand(). Viele Implementierungen von C-Bibliotheken bieten aus gutem Grund wiedereintrittsfähige Alternativen. (Die C-Bibliothek auf dem Computer, den ich jetzt verwende, bietet beispielsweise den rein funktionalen Wiedereintritt rand_r().) Erlang bietet den C-ähnlichen random:uniform(), aber auch den rein funktionalen random:uniform_s(). Man sollte die Version verwenden, die den internen Zustand in beiden Sprachen explizit macht.
Warren Young

1
Secure.wikimedia.org/wikipedia/en/wiki/… "Eine Funktion weist jedem Eingang eines bestimmten Typs genau einen Wert zu."
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

16

Ich habe Erlang bereits in einigen Projekten verwendet. Ich benutze es oft für erholsame Dienste. Wo ich es jedoch nicht benutze, ist es für komplexe Front-End-Webanwendungen, bei denen Tools wie Ruby on Rails weitaus besser sind. Aber für den Powerbroker hinter den Kulissen kenne ich kein besseres Werkzeug als Erlang.

Ich benutze auch einige Anwendungen, die in Erlang geschrieben sind. Ich benutze CouchDB und RabbitMQ ein bisschen und habe ein paar EJabberd-Server eingerichtet. Diese Anwendungen sind die leistungsstärksten, einfachsten und flexibelsten Tools auf ihrem Gebiet.

Erlang nicht verwenden zu wollen, weil es keine JVM verwendet, ist meiner Meinung nach ziemlich dumm. JVM ist kein magisches Werkzeug, das das Beste ist, um alles auf der Welt zu tun. Meiner Meinung nach unterscheidet die Fähigkeit, aus einem Arsenal verschiedener Tools zu wählen und nicht in einer einzigen Sprache oder einem einzigen Framework zu stecken, Experten von Code-Affen.

PS: Nachdem ich meinen Kommentar im Kontext gelesen hatte, bemerkte ich, dass es so aussah, als würde ich oxbow_lakes einen Code-Affen nennen. Ich war es wirklich nicht und entschuldige mich, wenn er es so nahm. Ich verallgemeinerte über Arten von Programmierern und würde niemals eine Person einen so negativen Namen nennen, basierend auf einem Kommentar von ihm. Er ist wahrscheinlich ein guter Programmierer, obwohl ich ihn ermutige, die JVM nicht zu einer Art Deal Breaker zu machen.


3
Ich denke, das ganze "Es sieht nicht wie C aus, ist also schlecht" war ein bisschen schlechter als das JVM-Bit. Es ist alles nur ein bisschen albern, wenn du mich fragst. Aber niemand fragt mich, also sollte ich einfach in meiner Ecke schweigen. ;)
Rayne

9

Während ich nicht habe, haben andere im Internet, z

Wir untersuchten die relativen Vorzüge von C ++ und Erlang bei der Implementierung eines parallelen Algorithmus zur Verfolgung akustischer Strahlen für die US-Marine. Wir fanden eine viel kleinere Lernkurve und eine bessere Debugging-Umgebung für paralleles Erlang als für pthreads-basierte C ++ - Programmierung. Unsere C ++ - Implementierung übertraf das Erlang-Programm um mindestens das 12-fache. Versuche, Erlang auf dem IBM Cell BE-Mikroprozessor zu verwenden, wurden durch den Speicherbedarf von Erlang vereitelt. (Quelle)

Und etwas, das mir am Herzen liegt und an das ich mich erinnere, als ich nach dem ICFP-Wettbewerb zurückgelesen habe:

Die Codierung war sehr einfach und übersetzte Pseudocode in C ++. Ich hätte Java oder C # verwenden können, aber ich bin an dem Punkt angelangt, an dem das Programmieren auf hoher Ebene in C ++ genauso einfach ist, und ich wollte die Option beibehalten, schnell in ein Bit-Twiddling auf niedriger Ebene zu verfallen, wenn es dazu kommt bis dahin. Erlang ist meine andere Lieblingssprache zum Hacken, aber ich hatte Angst, auf ein Leistungsproblem zu stoßen, aus dem ich mich nicht befreien konnte. (Quelle)


Wow, ich weiß nicht einmal, dass Erlang auf dem IBM Cell BE-Prozessor lief. Ist Erlang also am besten für Umgebungen mit großem Speicher geeignet?
appshare.co

8
Erlang ist eine ausgezeichnete Wahl für hochzuverlässige Umgebungen mit hohen Transaktionen. Es besteht die Möglichkeit, dass Sie alle Anrufe über Erlang-basierte Switches tätigen. Und es wird immer häufiger bei Internet-Servern wie MQ und Jabber eingesetzt.
Wird

1
Telefonschalter sind ein guter Nährboden für Sprachen. AT & T Bell brachte sogar zwei Hauptsprachen hervor, C und C ++. Und ihre Telefonschalter hatten für einen großen Teil der 90er Jahre die höchste gemessene Zuverlässigkeit der FCC. Aber die Lernkurve, um dorthin zu gelangen, war ziemlich hoch.
MSalters

7

Für mich ist die Tatsache, dass Erlang dynamisch getippt ist, etwas, das mich misstrauisch macht. Obwohl ich tun Verwendung dynamisch typisierten Sprachen , weil einige von ihnen nur so sehr problemorientiert sind (nehmen Python, ich viele Probleme mit ihm lösen), ich möchte statt statisch typisierte sie.

Das heißt, ich wollte Erlang eigentlich für einige Zeit ausprobieren, und ich habe gerade angefangen, die Quelle herunterzuladen. Ihre „Frage“ hat also doch etwas erreicht. ;-);


6

Ich kenne Erlang seit der Universität, habe es aber bisher noch nie in meinen eigenen Projekten verwendet. Hauptsächlich, weil ich hauptsächlich Desktop-Anwendungen entwickle und Erlang keine gute Sprache ist, um nette GUIs zu erstellen. Aber ich werde bald eine Serveranwendung implementieren und Erlang ausprobieren, denn dafür ist es gut. Aber ich mache mir Sorgen, dass ich mehr Bibliotheken brauche, also versuche ich es vielleicht stattdessen mit Java.


2
Hat Joe Armstrong nicht speziell einen Erlang-Adapter für das X-Windows-Protokoll geschrieben? Ich hatte gedacht, dass das Schreiben von GUIs in Erlang eigentlich ganz einfach sein würde.
Konrad Rudolph

4
Ja, Sie können eine GUI in Erlang schreiben. Aber es ist schwierig, wenn Sie etwas Fortgeschritteneres wie WPF wollen.
Jonas

6

Eine Reihe von Gründen:

  • Weil es jedem fremd erscheint, der an die C-Sprachfamilie gewöhnt ist

  • Weil ich auf der Java Virtual Machine laufen wollte, um die Tools zu nutzen, die ich kannte und verstand (wie JConsole), und die jahrelangen Anstrengungen, die in JIT und GC investiert wurden.

  • Weil ich nicht alle (Java-) Bibliotheken neu schreiben wollte, die ich im Laufe der Jahre aufgebaut habe.

  • Weil ich keine Ahnung vom Erlang "Ökosystem" habe (Datenbankzugriff, Konfiguration, Build usw.).

Grundsätzlich bin ich mit Java, seiner Plattform und seinem Ökosystem vertraut und habe viel Mühe in die Erstellung von Dingen investiert, die auf der JVM ausgeführt werden. Es war bei weitem einfacher , zur Scala zu wechseln


23
Viele Sprachen sehen nicht wie C aus. Wie ist das überhaupt ein echtes Pro oder Contra? Ich verstehe sicherlich syntaktische Vorlieben, aber ich bin mir nicht sicher, ob dies ein wirklicher Grund ist, eine Sprache völlig zu ignorieren.
Rayne

7
Das sind gute Gründe, aber haben Sie tatsächlich in Erlang programmiert? Die Frage richtete sich an Leute, die es tatsächlich ausprobiert hatten.
Daniel C. Sobral

3
Einige gute Punkte, aber die allgemeine Antwort lautet "Ich habe mich dagegen entschieden, weil ich Java wirklich mag".
ZJR

2
@ Rayne Sheesh, kühl dich ab. Chris hat dich nicht angegriffen. Ganz im Gegenteil, er erklärte einfach, dass Sie, weil Sie jünger sind, nicht mehr so ​​lange dasselbe tun und sich sehr gut an Veränderungen anpassen können. Wenn überhaupt, behandelt er Ihr Alter als Vorteil. Eine, die er nicht mehr teilt, daher ist seine Sicht auf die Dinge anders. Denken Sie zum Beispiel an das Fahren. Jemand, der seit 30 Jahren in den USA fährt, wird viel mehr Probleme haben, sich an das Fahren in Großbritannien anzupassen, als jemand, der gerade mit dem Fahren begonnen hat.
Daniel C. Sobral

4
@ZJR - die Antwort ist nicht, dass ich Java wirklich mag (im Gegenteil, ich mache jetzt alles in Scala), aber ich verstehe die JVM wirklich ! Java und die JVM sind nicht dasselbe!
oxbow_lakes

6

Ich habe mich gegen die Verwendung von Erlang für mein Projekt entschieden, das mit vielen gemeinsam genutzten Daten auf einem einzelnen Multiprozessorsystem ausgeführt werden sollte, und mich für Clojure entschieden, da Clojure wirklich die Parallelität des gemeinsam genutzten Speichers erhält. Wenn ich an verteilten Datenspeichersystemen gearbeitet habe, war Erlang eine gute Wahl, weil Erlang wirklich auf verteilte Nachrichtenübermittlungssysteme glänzt. Ich vergleiche das Projekt mit der besten Funktion in der Sprache und wähle entsprechend


5

Verwendet es für ein Nachrichten-Gateway für ein proprietäres, mehrschichtiges Binärprotokoll. OTP-Muster für Server und Beziehungen zwischen Diensten sowie der binäre Mustervergleich machten den Entwicklungsprozess sehr einfach. Für einen solchen Anwendungsfall würde ich Erlang wahrscheinlich wieder anderen Sprachen vorziehen.


4

Die JVM ist kein Werkzeug, sondern eine Plattform. Obwohl ich alle dafür bin, das beste Werkzeug für den Job auszuwählen, ist die Plattform größtenteils bereits festgelegt. Wenn ich nicht etwas Eigenständiges entwickle, von Grund auf neu und ohne den Wunsch, vorhandenen Code / Bibliothek wiederzuverwenden (drei Aspekte, die für sich genommen unwahrscheinlich sind), kann ich die Plattform frei wählen.

Ich verwende mehrere Tools und Sprachen, aber ich ziele hauptsächlich auf die JVM-Plattform ab. Das schließt Erlang für die meisten, wenn nicht alle meiner Projekte aus, so interessant einige Konzepte auch sind.

Silvio


4

Obwohl mir viele Designaspekte der Erlang-Laufzeit und der OTP-Plattform gefallen haben, fand ich, dass es eine ziemlich nervige Programmiersprache ist, in der man sich entwickeln kann. Die Kommas und Punkte sind völlig lahm und erfordern oft das Umschreiben des letzten Zeichens vieler Zeilen von Code nur um eine Zeile zu ändern. Außerdem sind einige Operationen, die in Ruby oder Clojure einfach sind, in Erlang mühsam, z. B. die Behandlung von Zeichenfolgen.

Für verteilte Systeme, die auf einer gemeinsam genutzten Datenbank basieren, ist das Mnesia-System sehr leistungsfähig und wahrscheinlich eine gute Option, aber ich programmiere in einer Sprache, um zu lernen und Spaß zu haben, und Erlangs nerviger Faktor überwog den Spaßfaktor, sobald ich die Grundlagen überwunden hatte Tutorials zu Bankkonten und Schreiben von Plugins für einen XMPP-Server.


3

Ich liebe Erlang vom Standpunkt der Parallelität. Erlang hat die Parallelität wirklich richtig gemacht. Ich habe erlang nicht hauptsächlich wegen der Syntax verwendet.

Ich bin kein funktionierender Programmierer von Beruf. Ich benutze im Allgemeinen C ++, daher bin ich sehr gespannt auf meine Fähigkeit, zwischen Stilen (OOP, Imperativ, Meta usw.) zu wechseln. Es fühlte sich an, als würde Erlang mich zwingen, die heilige Kuh der unveränderlichen Daten anzubeten.

Ich liebe den Ansatz zur Parallelität, einfach, schön, skalierbar, leistungsstark. Aber die ganze Zeit, in der ich in Erlang programmierte, dachte ich immer wieder, Mann, ich würde eine Teilmenge von Java sehr bevorzugen, die den Datenaustausch zwischen Thread und verwendetem Erlangs-Parallelitätsmodell nicht zulässt. Ich denke, Java hätte die beste Möglichkeit, die Sprache des Funktionsumfangs einzuschränken, der mit Erlangs Prozessen und Kanälen kompatibel ist.

Erst kürzlich stellte ich fest, dass die Programmiersprache D Parallelität im Erlang-Stil mit vertrauter Syntax im C-Stil und Multi-Paradigmen-Sprache bietet . Ich habe noch nichts massiv gleichzeitig mit D ausprobiert, daher kann ich nicht sagen, ob es sich um eine perfekte Übersetzung handelt.

So professionell benutze ich C ++, aber ich gebe mein Bestes, um massiv gleichzeitige Anwendungen wie in Erlang zu modellieren. Irgendwann möchte ich Ds Parallelitätstools eine echte Probefahrt geben.


2

Ich werde Erlang nicht einmal ansehen.

Zwei Blog-Beiträge haben es für mich geschafft:

  1. Erlang-Maschinen durchsuchen die gesamte Liste, um herauszufinden, ob eine Nachricht verarbeitet werden muss. Der einzige Weg, um eine Nachricht zu erhalten, besteht darin, die gesamte Liste zu durchlaufen (ich vermute, dass das Filtern von Nachrichten nach PID auch das Durchsuchen der gesamten Nachrichtenliste umfasst).

    http://www.lshift.net/blog/2010/02/28/memory-matters-even-in-erlang

  2. Es gibt keine Wunder, tatsächlich bietet Erlang nicht zu viele Dienste, um unvermeidbare Überlastungen zu bewältigen - z. B. bleibt es dem Anwendungsprogrammierer überlassen, nach verfügbarem Speicherplatz in der Nachrichtenwarteschlange zu suchen (angeblich indem er die Warteschlange durchläuft, um den aktuellen Wert herauszufinden Länge und ich nehme an, es gibt keine eingebauten Mechanismen, um eine gewisse Fairness zwischen den Absendern zu gewährleisten.

    erlang - wie kann man die Nachrichtenwarteschlange begrenzen oder emulieren?

Sowohl (1) als auch (2) sind in meinem Buch weit unter der Naivität, und ich bin sicher, dass in Erlang-Maschinen mehr Software-Edelsteine ​​ähnlicher Art stecken.

Also kein Erlang für mich.

Es scheint, dass C ++ + Boost immer noch das einzige Spiel in der Stadt ist, wenn Sie sich einmal mit einem großen System auseinandersetzen müssen, das unter Überlastung eine hohe Leistung erfordert.

Ich werde als nächstes auf D schauen.


2

Ich wollte Erlang für ein Projekt verwenden, da es eine erstaunliche Skalierbarkeit mit der Anzahl der CPUs aufweist. (Wir verwenden andere Sprachen und stoßen gelegentlich an die Wand, sodass wir die App optimieren müssen.)

Das Problem war, dass wir unsere Anwendung auf mehreren Plattformen bereitstellen müssen: Linux, Solaris und AIX. Leider gibt es derzeit keine Erlang-Installation für AIX.

Eine kleine Operation schließt den Aufwand für die Portierung und Wartung einer AIX-Version von Erlang aus, und die Aufforderung an unsere Kunden, Linux für einen Teil unserer Anwendung zu verwenden, ist kein Problem.

Ich hoffe immer noch, dass ein AIX Erlang ankommt, damit wir ihn verwenden können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.