2012-10-09 11 views
5

Clojure è scritto principalmente in Clojure, ma doveva esserci una "prima" versione di un compilatore clojure che è stato scritto in qualcos'altro, presumibilmente Java.Il primo compilatore di clojure?

Il codice di questo compilatore è disponibile ovunque?

Il mio interesse è puramente accademico, non di produzione, mi piacerebbe vedere il modo in cui Rich Hickey ha gestito il problema dell'uovo/pollo.

+8

questo è uno dei primi commit di github ... puoi andare avanti da lì. https://github.com/clojure/clojure/tree/894a0c81075b8f4b64b7f890ab0c8522a7a9986a – Kyle

+0

Dai discorsi che ho ascoltato di recente sembra che ci sia ancora un sacco di codice Java al centro di Clojure. Non ho ancora afferrato la sorgente, ma non mi sorprenderebbe affatto se quel core fosse sufficiente per ottenere il REPL/le operazioni di base e tutte le estensioni su di esso si trovassero in Clojure. Probabilmente non è molto vantaggioso tornare indietro e creare un compilatore Clojure completo in quanto ciò comporterebbe delle dipendenze storiche in caso di perdita di dati. –

+1

@BrianKnoblauch Dovresti prendere la fonte e dare un'occhiata. Un sacco di cose che usi in Clojure sono solo classi java. per esempio. Parole chiave, Atomi. Se sei familiare con Java, è facile guardare la fonte e capire cosa fanno queste cose. – Bill

risposta

3

Non sono sicuro se questo si riferisce ai tuoi interessi, ma in origine Rich aveva lavorato su un linguaggio chiamato DotLisp e per questo ha iniziato con uno studio di JScheme, che ha usato come base per il codice originale e alla fine sostituito completamente.

DotLisp è qui: http://dotlisp.sourceforge.net/dotlisp.htm

JScheme è qui: http://jscheme.sourceforge.net/jscheme/main.html

(Trivia:. Uno degli JScheme autori è Brandeis professore Tim Hickey, relazione non noto a Rich)

9

Il clojure il compilatore è scritto in java, non in clojure. Quindi la versione attuale è quella che soddisferà la tua curiosità. Ovviamente è un punto di vista ragionevole dire che le macro fanno parte del compilatore, e quelle sono effettivamente scritte in clojure, ma non sono rilevanti per il problema uovo/gallina che si cita, che è risolto avendo il compilatore in Java.

+1

c'è stato un continuo interesse a vedere "Clojure in Clojure" per sempre ... un giorno forse :) –

4

Il bootstrap del compilatore è un problema comune quando si scrive il compilatore nella stessa lingua di quella che si sta compilando.

Nel caso di Clojure, tuttavia, il compilatore is written in Java, quindi non sono necessari giochi complicati.

Per riferimento storico, GHC, il compilatore Haskell (scritto in Haskell), è stato originariamente compilato tramite Lazy ML.

Problemi correlati