2013-08-13 6 views
6

Ho provato sia SBCL che Clojure e ho scoperto che mi piace la sintassi di Clojure, ma per me è molto lento rispetto a SBCL. Ci sono implementazioni di Clojure su SBCL o sarà possibile?Sarà possibile implementare Clojure (o sintassi Clojure) su SBCL (o Other Fast Lisp)?


ho trovato https://github.com/ayrnieu/disclojure che mi può illuminare. :-)

+0

Più lento in fase di esecuzione o più lento all'avvio? La velocità di runtime dovrebbe essere paragonabile, sebbene il tempo di avvio sia un problema noto. – noisesmith

+0

Quale Clojure stai correndo? Forse puoi modificare un esempio di qualcosa che è più veloce in SBCL rispetto a Clojure? – Sylwester

+0

Per un insieme diversificato di piccoli programmi, SBCL funziona meglio con Clojure sugli altri, a determinate condizioni: vedere [benchmark game] (http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang = clojure & lang2 = SBCL & data = u64q). Personalmente penso che SBCL sia un'implementazione incredibile. Più veloce di qualsiasi altro Common Lisp per la mia applicazione principale. Non ho provato a portarlo su Clojure. Non posso incolpare nessuno per non apprezzare le stranezze sintattiche di CL. – Mars

risposta

8

Clojure è destinato a diversi back-end. Si tratta di un effetto collaterale Clojure che è un linguaggio ospitato progettato con lo philosophy di che abbraccia l'host. Ad esempio, non sarà mai l'obiettivo, per esempio, di rendere lo stesso codice scritto per Clojure sulla JVM non modificato, ancora una volta, ad esempio, il CLR. Quantità consistenti di codice sono comuni tra Clojure per JVM e ClojureScript, che è un bel bonus.

è attualmente stabile per:

  • JVM
  • JavaScript/ECMAScript

Generalmente stabile per:

  • CLR/.net

e so di sperimentale costruisce per:

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

più bersagli vengono visualizzati come interesse e il tempo si intersecano. Se desideri fornire un'implementazione per il tuo Lisp preferito, le patch sono benvenute! È consigliabile basare la propria implementazione sul compilatore ClojureScript poiché esemplifica al meglio i metodi di sviluppo previsti per il compilatore.

1

È possibile ma è improbabile che si ottenga molto più velocemente, quindi è sulla JVM.

Se si vuole accelerarlo forse esaminare i librarys più alta velocità costruire per clojure, come i dati Clojure utilizzando rappresentazioni JVM di basso livello e cose del genere o lascia la tua librarys che sono più veloci.

Rendere il clojure veloce sulla JVM è complicato ma fattibile, probabilmente una scommessa molto migliore di una porta per SBCL.

2

Mentre le risposte precedenti indicavano le difficoltà di ospitare Clojure in diverse lingue, c'è un linguaggio di programmazione che penso sia interessante da guardare: Shen. È stato progettato con un set minimo di 45 primitive instructions, in modo che sia facile portarlo in diverse lingue. Attualmente funziona con CLisp, SBCL, Clojure, Scheme, Ruby, Python, Java e Javascript. Sembra che sia un mix di ML e Lisp, anche se non ho programmato molto con esso.