Supongamos que el idioma en el que está trabajando es un lenguaje, por ejemplo Lisp, aunque no importa. (Podría ser C++, Java, Ruby, cualquier cosa.)
Bueno, usted tiene una implementación de Lisp. Llame a esta implementación Imp (solo algunos nombres inventados para IMPlementation). Como Imp es un programa en sí mismo, su computadora puede ejecutarlo. Ahora escribe su propia implementación para Lisp escrita en Lisp y lo llama Circ. Circ es solo un programa compilado (o interpretado si se quiere) a partir del código Lisp. Su código está escrito para que se lea en un archivo, lo analice (lo procese en datos significativos) y haga algo con los datos. ¿Qué es esto? En el caso de Circ, ejecuta los datos.
Pero, ¿cómo lo hace?
Bueno, supongamos que para un caso simple que el código Circ lee y analiza es algo simple como hacer algunas operaciones matemáticas y sacar el resultado. Circ procesa el código en datos fáciles de usar (bueno para un lenguaje como Lisp, es fácil comenzar, pero eso está más allá del punto) y lo almacena. Bueno, en Lisp puedes escribir código para contrastar números, por lo que el código escrito para Circ puede hacerlo también porque está escrito en Lisp. Entonces, los datos procesados se conectan a algún código de procesamiento adicional ... ¡y listo! ¡Tienes el resultado numérico! Entonces su programa Circ da como resultado el resultado.
Lo mismo se puede hacer con cosas más complejas que las matemáticas simples. De hecho, puede compilar/interpretar otros aspectos del lenguaje. Escribe suficiente de estos "otros aspectos" y pégalos, obtendrás un compilador de Lisp escrito en Lisp.
Como el compilador es compilado por Imp, puede ser ejecutado por su máquina, ¡y listo! Estás listo.
¿Es esto solo en el caso de Rubinius, o todos los compiladores auto interpretados tienen un poco de otro lenguaje involucrado solo para comenzar? – joeellis
Rubinius no está solo. Creo que la pregunta que hace en el comentario de seguimiento da en un tema más profundo. Por lo tanto, en lugar de responderlo directamente, te señalaría este artículo en wikipedia sobre los compiladores. http://en.wikipedia.org/wiki/Compiler Específicamente, para esta pregunta, eche un vistazo a las secciones "Compilación" y "Salida del compilador". – jefflunt