Gibt es einen Beweis dafür, dass die VM von Erlang schneller ist als die von Erlang?

19

Ich habe Zeit in das Erlernen der funktionalen Programmierung gesteckt und bin zu dem Teil gekommen, an dem ich anfangen möchte, ein Projekt zu schreiben, anstatt nur in Tutorials / Beispielen herumzuspielen.

Während meiner Recherchen stellte ich fest, dass Erlang beim Schreiben von paralleler Software (was mein Ziel ist) ziemlich leistungsfähig zu sein scheint, aber Ressourcen und Tools für die Entwicklung sind nicht so ausgereift wie Microsoft-Entwicklungsprodukte.

F # kann unter Linux (Mono) ausgeführt werden, sodass die Anforderungen erfüllt sind. Beim Stöbern im Internet kann ich jedoch keine Vergleiche zwischen F # und Erlang finden. Im Moment neige ich zu Erlang, nur weil es die meiste Presse zu haben scheint, aber ich bin neugierig, ob es wirklich einen Leistungsunterschied zwischen den beiden Systemen gibt.

Da ich es gewohnt bin, in .NET zu entwickeln, kann ich mit F # wahrscheinlich viel schneller als Erlang auf den neuesten Stand kommen, aber ich kann keine Ressource finden, die mich davon überzeugt, dass F # genauso skalierbar ist wie Erlang.

Am meisten interessiert mich die Simulation, die viele schnell verarbeitete Nachrichten an persistente Knoten senden wird.

Wenn ich mit dem, was ich zu fragen versuche, keine gute Arbeit geleistet habe, bitten Sie um weitere Bestätigung.

afuzzyllama
quelle
12
Sprachen haben keine Geschwindigkeit. Bestimmte Sprachimplementierungen, die ein bestimmtes Programm auf einer bestimmten Eingabe ausführen (dies kann je nach Programm die gesamte Außenwelt umfassen), haben eine Geschwindigkeit.
1
F # läuft auf der .NET-Laufzeit und Erlang läuft auf einer eigenen VM. Erlang's Prozesse gelten als leichtgewichtig im Vergleich zu Sprachen, die sich in seiner Domäne befinden (wie Scala). Ist die .NET / Mono-Laufzeit für eine Simulation, die Knoten erzeugt und viele Nachrichten weitergibt, genauso gut wie die VM von Erlang oder ist die VM von Erlang überlegen?
Afuzzyllama
3
@delnan: Sprachen haben Leistungsmerkmale.
Jon Harrop
2
@ JonHarrop Wie so? Eine Programmiersprache besteht lediglich aus einer Syntax und der damit verbundenen Semantik.
1
@delnan: Semantik schränkt die Optimierung ein. Beispielsweise sind dynamisch typisierte Sprachen in der Praxis nur schwer zu optimieren. Das Fehlen von Werttypen in der JVM führt zu einer viel höheren Heap-Zuweisung als in .NET und folglich zu einer viel höheren Belastung des GC. Wie Codegeneratoren können auch Garbage Collectors Informationen wie Unveränderlichkeit ausnutzen, um die Leistung zu verbessern. Das Design einer Programmiersprache hat einen großen Einfluss darauf.
Jon Harrop

Antworten:

21

Was meinst du mit "lebensfähig"? "Die meiste Presse" ist nicht unbedingt der beste Weg, um eine Sprache zu wählen.

Erlang's Anspruch auf Ruhm ist die Fähigkeit zur massiven Parallelisierung. Aus diesem Grund wird es häufig in Telefonschaltern von Ericsson verwendet. Erlang ist eine Software in Echtzeit, sodass Sie bestimmte Leistungsgarantien dafür abgeben können.

F # profitiert von den Optimierungsmöglichkeiten des .NET-Jitters. Darüber hinaus ist die Sprache selbst als leistungsstarke Funktionssprache konzipiert (es handelt sich um eine Variante von OCaml, die aufgrund ihrer Geschwindigkeit in der Finanzbranche weit verbreitet ist).

Letztendlich sollte F # der Aufgabe gewachsen sein, es sei denn, Sie möchten Millionen winziger Agenten gleichzeitig ausführen (wofür Erlang optimiert ist).

Auf dieser Seite werden die entsprechenden Anwendungsfälle für Erlang erläutert.

Robert Harvey
quelle
Mit "lebensfähig" meinte ich skalierbar. Ich weiß, dass Presse bedeutet nicht, dass diese Sprache unbedingt besser ist, aber es scheint, dass Erlang bewiesen wurde (zumindest von Ericsson). Was meinen Sie mit Agenten? Prozesse?
Afuzzyllama
1
Ja. Es ist erwiesen, dass Erlang viele Telefonanrufe auf einem Ericsson-Switch gleichzeitig abwickelt. Sie müssen herausfinden, ob Ihr Anwendungsfall ähnlich ist. Ich sehe das als einen relativ speziellen Anwendungsfall; Wenn dieses Merkmal in Ihrer Anwendung fehlt , sehe ich keinen Vorteil für die Verwendung von Erlang, und die Erlang-Seite beschreibt tatsächlich einige Anwendungsfälle, für die Erlang nicht geeignet ist.
Robert Harvey
2
Agenten, Schauspieler, es ist ein Designkonzept, das in funktionellen Sprachdiskussionen häufig vorkommt. Ich bin überrascht, dass du noch nicht darauf gestoßen bist. en.wikipedia.org/wiki/Agent-based_model
Patrick Hughes
Mit anderen Worten, brauchen Sie eine massive Skalierbarkeit (jetzt oder irgendwann), wie sie Erlang bietet? Die meisten Programme tun das nicht.
Robert Harvey
1
F # hat auch das Agentenmodell - mit dem leicht kryptisch benannten 'MailboxProcessor', was dasselbe ist wie in Erlang. Zu den relativen Leistungsmerkmalen kann ich jedoch keine Angaben machen.
FinnNk
7

Zu diesem Thema können nur wenige objektive Aussagen getroffen werden, da die Leistung dieser beiden Sprachen stark von der Anwendung und dem Programmierstil abhängt.

Der einzige Rat, den ich geben kann, ist, dass F # den Leistungsvorteil eines statischen Systems hat und die CLR dies gut nutzt, um die Leistung zu verbessern. F # verfügt zwar über asynchrone Agenten und Nachrichtenübermittlung, wurde jedoch nicht optimiert, und der synchrone Code ist häufig mehr als zehnmal schneller.

Erlang ist dynamisch getippt, was einen erheblichen Leistungsnachteil mit sich bringt (erwarten Sie viel mehr Boxing), aber es wurde von Grund auf für die Unterstützung des schnellen Nachrichtenaustauschs zwischen asynchronen Agenten entwickelt, sodass es möglicherweise viel schneller ist als das entsprechende F #. . Ich habe jedoch keine Benchmark-Ergebnisse, um dies zu belegen: Es ist nur meine Erwartung.

Abgesehen davon sind sowohl Erlang als auch F # relativ Randsprachen mit kleinen Communities, und aufgrund ihrer unterschiedlichen Zielmärkte sind Personen, die mit beiden vertraut sind, selten. Die einzige Person, an die ich denken kann, die sich fast qualifiziert hat, ist Jesper Louis Andersen, aber ich bin mir nicht sicher, wie viel F # er getan hat.

Jon Harrop
quelle
4

Sie sollten diesen Beitrag von Joe Armstrong lesen: http://erlang.org/pipermail/erlang-questions/2012-February/064277.html

Das kurze daran ist, dass Erlang nicht dafür entwickelt wurde, schnell zu sein! In vielen Fällen ist es relativ schnell, aber das ist zweitrangig bei Problemen wie Fehlertoleranz und Stabilität.

Die Wahrheit ist, dass sowohl Erlang als auch F # nette Sprachen sind, und obwohl ich mir F # nur kurz angesehen habe, habe ich ein Buch über Erlang geschrieben: Erstellen von Webanwendungen mit Erlang und ich kann sagen, dass es eine unterhaltsame Sprache ist, in der man arbeiten kann.

Ich möchte auch darauf hinweisen, dass es einen Boom bei Büchern in funktionalen Sprachen zu geben scheint, die in den nächsten 6 bis 9 Monaten veröffentlicht werden. Ich kenne mindestens 4 auf Erlang (einschließlich meiner), eine auf Haskell sowie Titel auf OCaml, Clojure und F #.

Zachary K
quelle