2012-10-09 22 views
5

Clojure está escrito principalmente en Clojure, pero tenía que haber una "primera" versión de un compilador de clojure escrito en otra cosa, presumiblemente Java.¿El primer compilador de clojure?

¿El código de ese compilador está disponible en algún lugar?

Mi interés es puramente académico, no de producción, me gustaría ver la forma en que Rich Hickey manejó el problema del huevo/la gallina.

+8

este es uno de los primeros compromisos con github ... puedes avanzar desde allí. https://github.com/clojure/clojure/tree/894a0c81075b8f4b64b7f890ab0c8522a7a9986a – Kyle

+0

De las conversaciones que he escuchado recientemente parece que todavía hay un montón de código de Java en el centro de Clojure. Todavía no agarré la fuente, pero no me sorprendería en absoluto si ese núcleo es suficiente para realizar las operaciones de REPL/base y luego todas las extensiones encima están en Clojure arrancándose de eso. Probablemente no sea muy beneficioso retroceder y crear un compilador completamente Clojure ya que eso generaría dependencias históricas en el caso de la pérdida de datos. –

+1

@BrianKnoblauch Debe agarrar la fuente y echar un vistazo. Muchas de las cosas que usas en Clojure son solo clases de Java. p.ej. Palabras Clave, Átomos. Si estás familiarizado con Java, es más fácil mirar la fuente y entender qué hacen estas cosas. – Bill

Respuesta

3

No estoy seguro si esto se relaciona con sus intereses, pero Rich había trabajado originalmente en un lenguaje llamado DotLisp y para eso comenzó con un estudio de JScheme, que utilizó como base para el código original y eventualmente reemplazado por completo.

DotLisp está aquí: http://dotlisp.sourceforge.net/dotlisp.htm

JScheme está aquí: http://jscheme.sourceforge.net/jscheme/main.html

(Anécdota:. Uno de los autores de JScheme es profesor de Brandeis Tim Hickey, la relación no se conocen a Rich)

9

El clojure compilador está escrito en Java, no en Clojure. Entonces, la versión actual es la que satisfará tu curiosidad. Por supuesto, es un punto de vista razonable decir que las macros son parte del compilador, y que están escritas en clojure, pero no son relevantes para el problema de huevo/gallina que mencionas, que se resuelve teniendo el compilador en Java.

+1

ha habido un continuo interés en ver "Clojure in Clojure" para siempre ... algún día tal vez :) –

4

El arranque del compilador es un problema común cuando escribe su compilador en el mismo idioma que está compilando.

En el caso de Clojure, sin embargo, el compilador is written in Java, por lo que no se requieren juegos complicados.

Como referencia historcal diversión, GHC, el compilador de Haskell (escrito en Haskell), fue compilado originalmente a través de Lazy ML.