Paul Graham escribió que "The unusual thing about Lisp-- in fact, the defining quality of Lisp-- is that it can be written in itself." Pero eso no me parece para nada inusual o definitivo.¿Qué significa que "Lisp se puede escribir en sí mismo?"
ISTM que un lenguaje de programación se define por dos cosas: su compilador o intérprete, que define la sintaxis y la semántica para el lenguaje por fiat, y su biblioteca estándar, que define en gran medida las expresiones idiomáticas y técnicas los usuarios utilizarán al escribir código en el idioma.
Con algunas excepciones específicas, (los miembros que no pertenecen a C# de la familia .NET, por ejemplo) las bibliotecas estándar de la mayoría de los idiomas están escritas en ese idioma por dos muy buenas razones: porque compartirá el mismo conjunto de definiciones sintácticas, convenciones de llamadas a funciones, y el "aspecto y comportamiento" general del lenguaje, y porque las personas que es probable que escriban una biblioteca estándar para un lenguaje de programación son sus usuarios, y en particular su (s) diseñador (es). Entonces no hay nada único allí; eso es bastante estándar.
Y una vez más, no hay nada único o inusual en el compilador de un lenguaje escrito en sí mismo. Los compiladores C están escritos en C. Los compiladores de Pascal están escritos en Pascal. El compilador de C# de Mono está escrito en C#. Diablos, incluso some scripting languages tienen implementaciones "escritas en sí mismas".
Entonces, ¿qué significa que Lisp es inusual en ser escrito en sí mismo?
Como dices, un compilador o intérprete autohospedado no es una gran noticia. Un lenguaje cuyo árbol sintáctico abstracto * es * el código, que en sí mismo es totalmente manipulable como datos, por el contrario, es más bien un animal diferente. Escaneando el artículo de McCarthy sobre el cual estaba comentando Paul Graham, no hay ninguna duda razonable de que sea esta simetría la que tenga importancia. –
http://stackoverflow.com/questions/1481053/what-is-the-exact-definition-of-a-metacircular-interpreter –