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.
ghci
. B. via ). Für mich vereint das das Beste aus den Welten der statischen (nur typisierten) und dynamischen Sprachen.data
Definitionen darin schreiben . Sie müssen es in eine Datei schreiben und den REPL-Prozess ausführen lassen. Sowohl Ghci als auch Umarmungen.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 gibt wahrscheinlich andere Gründe, an die ich momentan nicht denken kann, aber dies sind die Hauptpunkte.
quelle
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.
quelle
rand()
sorgt für eine interessante Studie im Funktionsdesign. Viele Standardfunktionen der C-Bibliothek sind unter anderem nicht wiedereintrittsfähigrand()
. 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 Wiedereintrittrand_r()
.) Erlang bietet den C-ähnlichenrandom:uniform()
, aber auch den rein funktionalenrandom:uniform_s()
. Man sollte die Version verwenden, die den internen Zustand in beiden Sprachen explizit macht.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.
quelle
Während ich nicht habe, haben andere im Internet, z
Und etwas, das mir am Herzen liegt und an das ich mich erinnere, als ich nach dem ICFP-Wettbewerb zurückgelesen habe:
quelle
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. ;-);
quelle
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.
quelle
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
quelle
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
quelle
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.
quelle
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
quelle
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.
quelle
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.
quelle
Ich werde Erlang nicht einmal ansehen.
Zwei Blog-Beiträge haben es für mich geschafft:
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
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.
quelle
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.
quelle