2013-08-13 9 views
6

Ich habe sowohl SBCL und Clojure ausprobiert und festgestellt, dass ich die Syntax von Clojure mag, aber es ist sehr langsam im Vergleich zu SBCL für mich. Gibt es irgendeine Implementierung von Clojure über SBCL oder wird es möglich sein?Ist es möglich, dass Clojure (oder Clojure-Syntax) über SBCL (oder andere schnelle Lisp) implementieren?


Ich fand https://github.com/ayrnieu/disclojure, die mich aufklären können. :-)

+0

Langsamer zur Laufzeit oder langsamer zum Starten? Die Laufzeit sollte vergleichbar sein, obwohl die Startzeit ein bekanntes Problem ist. – noisesmith

+0

Welche Clojure liegst du? Vielleicht können Sie in einem Beispiel etwas bearbeiten, das in SBCL schneller ist als Clojure? – Sylwester

+0

Für eine Vielzahl von kleinen Programmen, SBCL besser auf einige, Clojure auf andere, unter bestimmten Bedingungen: Siehe [Benchmark-Spiel] (http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang = clojure & lang2 = sbcl & data = u64q). Ich persönlich denke, dass SBCL eine unglaubliche Implementierung ist. Schneller als jedes andere Common Lisp für meine Hauptanwendung. Habe nicht versucht, es nach Clojure zu portieren. Kann niemandem die Schuld geben, dass er die syntaktischen Eigenheiten von CL nicht mag. – Mars

Antwort

8

Clojure zielt auf mehrere Backends ab. Dies ist ein Nebeneffekt Clojure ist eine gehostete Sprache mit der philosophy von umarmen den Host entworfen. Es wird beispielsweise niemals das Ziel sein, den gleichen Code, der für Clojure geschrieben wurde, auf der JVM unmodifiziert auszuführen, zum Beispiel wieder in der CLR. Zwischen Clojure für die JVM und ClojureScript sind beträchtliche Mengen an Code üblich, was ein netter Bonus ist.

Es ist derzeit stabil:

  • JVM
  • JavaScript/ECMAScript

Allgemeinen stabil:

  • CLR/.net

und ich kenne experimentelle Builds für:

  • Python
  • C
  • Scheme
  • IOS (via Scheme)

Weitere Ziele zeigen sich als Interesse und Zeit schneiden. Wenn Sie eine Implementierung für Ihre Lieblings-Lisp bereitstellen möchten, sind Patches willkommen! Es wäre ratsam, Ihre Implementierung auf dem ClojureScript-Compiler zu basieren, da dies die beabsichtigten Entwicklungsmethoden für den Compiler am besten veranschaulicht.

1

Es ist möglich, aber es ist unwahrscheinlich, dass Sie viel schneller bekommen, dann ist es auf der JVM.

Wenn Sie es beschleunigen möchten, schauen Sie vielleicht in die Highspeed-Bibliothek für clojure, wie clojure Daten mit Low-Level-JVM-Darstellungen und solche Sachen oder schreiben Sie Ihre eigenen Bibliotheken, die schneller sind.

Clojure schnell auf der JVM zu machen ist knifflig, aber machbar, eine viel bessere Wette als eine Portierung auf SBCL.

2

Während die vorherigen Antworten die Schwierigkeiten beim Hosting von Clojure in verschiedenen Sprachen angaben, gibt es eine Programmiersprache, die ich interessant finde: Shen. Es wurde mit einem minimalen Satz von 45 primitive instructions, entworfen, so dass es einfach sein wird, in verschiedene Sprachen zu portieren. Es läuft derzeit unter CLisp, SBCL, Clojure, Scheme, Ruby, Python, Java und Javascript. Es scheint, dass es eine Mischung aus ML und Lisp ist, obwohl ich nicht viel damit programmiert habe.

Verwandte Themen