Usted obviamente no es un Lisp "fanboy", porque los niños y niñas que se ajustan a esa descripción generalmente se puede confiar en saber que Lisp es un lenguaje compilado. Lisp apareció en 1958. El manual de Lisp 1 fechado en 1961 ya describe la compilación.
La interpretación es útil; nos da semántica sin tener que escribir un compilador primero. Esta semántica proporciona un modelo de referencia para la semántica compilada: idealmente, los programas interpretados y compilados hacen lo mismo. Cuando descubrimos que no lo hacen, o lo resolvemos, o de alguna manera delineamos y justificamos la situación.
La interpretación se puede utilizar para arrancar un sistema Lisp compilado sin necesidad de una implementación de Lisp existente, sino utilizando otro lenguaje como C. La interpretación evita la necesidad de escribir un compilador Lisp en el lenguaje de arranque.
La implementación de CLISP de ANSI Common Lisp es un buen ejemplo de esto. Para compilar CLISP solo necesita un compilador de C. El compilador Lisp de CLISP está escrito en Lisp. Entonces, por supuesto, no tienes nada con que ejecutar ese compilador. La solución es interpretar el compilador utilizando un intérprete escrito en C.
Mientras se ejecuta interpretado, el compilador compila gran parte de la biblioteca Lisp.El resultado de esto es lo que CLISP llama una "imagen de memoria compilada a medias": una imagen que contiene rutinas compiladas, pero algunas rutinas interpretadas. (Creo que el compilador en sí es aún código interpretado).
Esta imagen medio compilada se utiliza para compilar el código restante, lo que da como resultado la imagen completamente compilada.
Sin el intérprete, el compilador de CLISP solo se pudo arrancar al insistir en que se instale primero otra implementación de Lisp. (La forma en que necesita un compilador de C para boostrap GCC). O bien, el compilador de CLISP debería escribirse en C, de modo que el compilador se compila con el compilador de C existente y luego se aplica al código Lisp para compilarlo antes de que pueda ejecutarse.
Nadie en su sano juicio desea escribir un compilador Lisp en C, y requerir una implementación de Lisp para construir una implementación de Lisp es una gran desventaja en un mundo en el que Lisp no es omnipresente. Lo que sucedería bajo el modelo de boostrapping Lisp-compiler-in-C es que el compilador Lisp escrito en C sería completamente minimalista y posiblemente incompleto, que emite código de baja calidad, solo lo suficientemente bueno para iniciar el boostrapping, y un "real" el compilador aún estaría escrito en Lisp.
Hay una escuela de pensamiento que dice que los Smalltalkers entre la Banda de los Cuatro pusieron el Patrón de Intérprete en el libro como una broma, solo para burlarse de la multitud de C++. Desafortunadamente, la multitud de C++ no entendió la broma, y ahora estamos atrapados con eso. (La broma es, por supuesto, que en Smalltalk el programador obtiene acceso de tiempo de ejecución programático completo al compilador e intérprete y, por lo tanto, no hay necesidad de algo así como el Patrón de Intérprete). –