2010-07-29 4 views
9

Was ist die leistungsfähigste (schnellste) Lisp-Implementierung auf der JVM? Durch Lisp-Implementierung betrachte ich alle Implementierungen einer beliebigen Sprache in Lisp-Familie, wie Common Lisp, Scheme, Clojure, ...Was ist das leistungsfähigste Lisp auf der JVM

Ich weiß, dass Clojure ziemlich schnell gemacht werden kann mit Typ Hinweise, dass ABCL im Allgemeinen nicht berücksichtigt wird schnell sein. Ich habe keine Erfahrung mit einem JVM-Programm, habe aber gehört, dass Kawa auch ziemlich schnell ist.

Antwort

10

Mit Clojure können Sie die Geschwindigkeit von Java (mit Typhinweisen natürlich) erreichen und Sie können nicht schneller als Java (außer in einigen sehr seltenen Fällen). Ich weiß nicht über die anderen lisps die sind vielleicht die gleiche Geschwindigkeit, aber nicht schneller.

Also, sagte über die Standardgeschwindigkeit von Anrufen und so weiter.

Clojure hat Datenstrukturen sind nicht immer so schnell wie möglich, aber die wirklich wettmachen mit anderen Eigenschaften wie Thread-Sicherheit, unveränderlich und schnell lesen.

Um die Datenstrukturen schneller zu machen, erfanden Rich Transienten, indem sie sie so änderbar machten, dass sie immer noch funktionsfähig sind (und sie sind viel schneller) und er arbeitet bereits an der nächsten großen Sache (lesen Sie das Camp Emerging Languages) Rede von reich).

Es ist viel einfacher, gleichzeitig Code mit Clojure zu schreiben, so dass wirklich für schnelle Programme importiert wird.

Also ist das nächste Ding Mathe. Auf der JVM gibt es drei Geschwindigkeitsstufen. Math mit Boxed-Typen, primitiv Typen mit Überlaufprüfung oder ohne Überlaufprüfung. Clojure bietet all diesen Möglichkeiten keine Grenzen.

Die nächste Sache ist, wie schnell Sie mit Java arbeiten können, wenn Sie Wrapper verwenden müssen, die Sie nicht so gut ausführen werden und Java-Aufrufe oft in den meisten JVM-Sprachen verwendet werden. Um Clojure in Clojure zu implementieren, musste Clojure ein Low-Level-Konstrukt hinzufügen, damit Sie ohne Overhead mit Java interagieren können.

So clojure ist so schnell wie es auf der JVM ist.

P.S.

Protokolle sind wie wirklich schnelle Multimethoden, die nicht so generisch sind, aber der Versand schnell genug, um sie in clojure core zu verwenden (und so nicht mehr von Java abhängig). Schau sie dir an, sie sind so cool.

9

nicht eine ganze Menge guter Daten obwohl this und einige andere scheinen das Offensichtliche anzuzeigen. Unveränderliche Sprachen leiden leicht darunter, wenn sie nicht unveränderbare Aufgaben ausführen, und nicht-unveränderliche Sprachen leiden darunter, wenn sie stark parallele Aufgaben ausführen.

Bei der Betrachtung dieser Fragen hilft es, die "Fail-Back-Option" in Betracht zu ziehen. Clojure kann für jeden Teil Ihres Codes, den der Profiler Ihnen mitteilt, nicht auf Java zurückgreifen.

kurz: Ich wähle clojure :)

3

Ich wäre überrascht, wenn es nicht clojure ist. Kein anderes JVM-Lispeln, von dem ich weiß, hat der Performance so viel Aufmerksamkeit geschenkt. Das schnellste Schema ist wahrscheinlich SISC - es ist in einem FASL-Format kompiliert, aber immer noch nicht "nativ" JVM-Anweisungsebene.

+1

SISC steht für "Second * Interpreter * of Scheme Code", für einen Interpreter gilt seine Leistung als ziemlich gut, aber es ist definitiv langsamer als kawa, das direkt zum Bytecode kompiliert und auch Typhinweise unterstützt.Ein Vergleich zwischen Clojure und Kawa-Performance könnte jedoch interessant sein. –

Verwandte Themen