Ich sehe online eine Menge Mist darüber, wie Erlang node.js in fast jeder denkbaren Kategorie in den Arsch tritt. Ich würde gerne Erlang lernen und es ausprobieren, aber hier ist das Problem. Ich stelle fest, dass es mir viel schwerer fällt, Erlang aufzunehmen als node.js. Mit node.js konnte ich ein relativ komplexes Projekt auswählen, und an einem Tag funktionierte etwas. Mit Erlang stoße ich auf Barrieren und fahre nicht annähernd so schnell.
Also .. für diejenigen mit mehr Erfahrung, ist Erlang kompliziert zu lernen, oder fehle ich nur etwas? Node.js ist vielleicht nicht perfekt, aber ich scheine in der Lage zu sein, Dinge damit zu erledigen.
Antworten:
Zuallererst stimme ich der Antwort von JUST MY correct OPINION in Bezug auf das Erlernen von Erlang zu. Es ist eine hauptsächlich funktionale Sprache (obwohl die Nebenläufigkeit eine große Rolle spielt), und alle Funktionen wurden hinzugefügt, um Fehlertoleranz und Robustheit zu gewährleisten, was nicht genau die gleichen Entwurfsziele wie bei Javascript darstellt.
Zweitens ist es etwas verlegt, Node.js zu verlassen, um in Erlang einzusteigen. Node.js ist ein einzelner Server / Framework, mit dem mithilfe von Callbacks alles ereignisgesteuert erledigt werden kann. Erlang hat ein eigenes Framework (OTP), aber es ist überhaupt nicht auf der gleichen Ebene.
Wenn Sie Erlang lernen möchten, empfehle ich meinen Blogeintrag Ein offener Brief an den Erlang-Anfänger (oder Onlooker) als Einführung, bevor Sie in Tutorials eintauchen .
Das einzige, in dem Sie Erlang und Node.js in Bezug auf Muster und Verwendung vergleichen können, ist, wie sie ereignisgesteuert sind. Hier gibt es jedoch zwei große Unterschiede. Das Modell von Node.js basiert auf Rückrufen, die an Ereignisse gebunden sind. Erlang basiert auf Nachrichtenwarteschlangen und empfängt selektiv. Welche Implikationen ergeben sich daraus?
Erstens, wenn Sie Dinge auf Callback-Basis erledigen, ist die einzige Art, wie Sie den Status herumtragen, entweder global zu sein oder in die fortlaufende Stilprogrammierung einzusteigen. Zweitens müssen Sie sich selbst um die vollständige Ereignismatrix kümmern. Ein Beispiel hierfür ist, wenn wir uns eine sehr einfache endliche Zustandsmaschine vorstellen: ein ereignisgesteuertes Mutex-Semaphor.
Das Mutex-Semaphor hat zwei Zustände: gesperrt und frei. Wenn eine bestimmte Recheneinheit (Worker, Prozess, Funktion oder Thread) Zugriff auf den Mutex erhalten möchte, muss sie ein Ereignis auslösen, das besagt, dass ich interessiert bin. Jetzt müssen Sie sich um folgende Arten von Ereignissen kümmern:
Dann müssen Sie zusätzliche Ereignisse berücksichtigen, z. B. Zeitüberschreitung, um Deadlocks zu vermeiden:
Dann haben Sie auch die Out-of-Bound-Ereignisse:
Die Ereignismatrix wird sehr schnell komplex. Unsere FSM hat hier nur 2 Zustände. Im Fall von Erlang (oder einer Sprache mit selektivem Empfang und Asynchronität mit potenziell synchronen Ereignissen) müssen Sie sich um einige Fälle kümmern:
Und das ist es. Die Zeitgeber werden in den gleichen Fällen behandelt wie die Empfangsvorgänge, und für alles, was mit "Warten bis es frei ist" zu tun hat, werden die Nachrichten automatisch in eine Warteschlange gestellt: Der Mitarbeiter muss nur auf eine Antwort warten. Das Modell ist in diesen Fällen sehr viel einfacher.
Dies bedeutet, dass in der Regel CPS- und Callback-basierte Modelle wie das in node.js Sie entweder auffordern, sehr geschickt mit Ereignissen umzugehen, oder Sie auffordern, sich vollständig um eine komplexe Ereignismatrix zu kümmern, weil Sie müssen bei jedem unwichtigen Fall zurückgerufen werden, der aus seltsamen Timing-Problemen und Statusänderungen resultiert.
Selektive Empfänge ermöglichen es Ihnen normalerweise, sich nur auf eine Untergruppe aller potenziellen Ereignisse zu konzentrieren, und ermöglichen es Ihnen, Ereignisse in diesem Fall weitaus einfacher zu beurteilen. Beachten Sie, dass Erlang ein Verhalten (Entwurfsmuster / Framework-Implementierung) von etwas hat, das aufgerufen wird
gen_event
. Mit der Implementierung von gen_event können Sie einen Mechanismus verwenden, der dem in node.js sehr ähnlich ist, wenn Sie dies wünschen.Es wird andere Punkte geben, die sie unterscheiden; Erlang hat eine präventive Zeitplanung, während node.js kooperativ ist. Erlang eignet sich eher für einige sehr umfangreiche Anwendungen (Distribution und alle), aber Node.js und seine Community sind in der Regel besser mit dem neuesten Webtrend vertraut. Es ist eine Frage der Wahl des besten Werkzeugs, und dies hängt von Ihrem Hintergrund, Ihrer Art von Problem und Ihren Vorlieben ab. In meinem Fall passt das Modell von Erlang einfach sehr gut zu meiner Denkweise. Dies ist nicht unbedingt für alle der Fall.
Hoffe das hilft.
quelle
Das Erlernen von Erlang ist nicht kompliziert, es ist nur für die Denkweise fremd, die die Chambers Constant (99,44%) der Programmierer bei der Arbeitsweise des Programmierens gelernt haben. Das Problem, mit dem Sie konfrontiert sind, ist wahrscheinlich eher eine konzeptionelle Desorientierung als eine tatsächliche Komplexität.
Hier sind einige der außerirdischen Eigenschaften von Erlang, die einen typischen Programmierer beißen werden:
Daher wird das Erlernen von Erlang für die meisten Programmierer eine größere Herausforderung sein als das Erlernen von Node.js - insbesondere, wenn der Programmierer bereits mit JavaScript vertraut ist. Am Ende gehe ich jedoch davon aus, dass die Erlang-Codierung weniger komplex sein wird als die entsprechende Node.js-Codierung , sobald Sie die konzeptionelle Barriere überwunden haben. Dies hat mehrere Gründe:
Machen Sie weiter mit Erlang, wenn Sie können, und wenn Sie es noch nicht getan haben, besuchen Sie Learn You Some Erlang for Great Good, um eine sanfte und (meistens) lustige Einführung in Erlang's Konzepte zu erhalten.
quelle
Es gibt einige signifikante Unterschiede zwischen Erlang und Node
Der erste ist, dass der Knoten Javascript ist, was bedeutet, dass es sich um eine sehr verbreitete Sprache handelt, die viele Merkmale mit Sprachen teilt, mit denen mehr Menschen vertraut sind, so dass es in der Regel viel einfacher ist, sich in Betrieb zu nehmen. Erlang hat für die meisten eine oft seltsame und ungewohnte Syntax, und obwohl eine Sprache viel einfacher ist als Javascript, ist sie aufgrund ihrer Einzigartigkeit etwas gewöhnungsbedürftiger
Das zweite ist, dass Erlang ein ganz bestimmtes Modell der gemeinsamen Nutzung von nichts hat. Es erfordert, dass Sie auf eine andere Art und Weise denken, um Probleme zu lösen. Das ist eine gute Sache (TM).
Der letzte wichtige Punkt ist, dass Erlang von einem kommerziellen Unternehmen entwickelt und später als Open-Source-Unternehmen genutzt wurde. Es war erst etwa zwei Jahre her, dass die Leute tatsächlich einzelne Commits in der Quellcodeverwaltung sehen konnten, und selbst jetzt denke ich nicht, dass alle Erlang-Entwickler umgezogen sind an die Öffentlichkeit Github Repo für ihre Entwicklung. node.js wurde von Anfang an in der Community erstellt. Dies bedeutet, dass die Community-Unterstützung weitaus besser ist. Es gibt bereits weitaus mehr Bibliotheken für node, mehr Community-Dokumentation, mehr Live-Beispiele, einen allgegenwärtigen Paketmanager usw. usw. Erlang holt auf In dieser Hinsicht ist es aber immer noch eine viel größere Rampe, um aufzustehen.
Mit Node können Sie lustige Dinge ziemlich schnell und relativ schmerzfrei programmieren. Bei großen Anwendungen, die erlangt hat und die seit langer Zeit gelöst wurden, treten immer größere Probleme auf. Erlang wird die Art und Weise, wie Sie programmieren, verändern und Sie (imo) zu einem besseren Programmierer machen, aber es wird Ihnen das Leben am Anfang nicht leicht machen. Beides macht auf unterschiedliche Weise Spaß.
quelle