Sé que esta publicación es antigua, pero pensé que podría agregar un poco a la discusión, ya que son puntos que se han perdido. Entonces, los futuros lectores pueden encontrar esto útil.
Me pregunto si a todos les falta el punto aquí. Puede escribir casi cualquier tipo de compilador, intérprete o máquina virtual en casi cualquier idioma. Cuando se usa C para escribir un compilador de C, se necesita un compilador de C para compilar el nuevo compilador. Sin embargo, el resultado es un código nativo que se ejecuta en la plataforma designada. El hecho de que la JVM esté escrita en el lenguaje que se ejecuta en la JVM no significa que la salida deba generar código que se ejecute en la JVM. Por ejemplo, puede escribir C, Basic, Pascal Compilers o incluso ensambladores en Java. En este caso, necesitará la JVM para crear el compilador o el ensamblador, pero una vez creado, es posible que ya no necesite la JVM si el código inicial dio como resultado un código nativo. Otro enfoque es escribir un traductor que toma un idioma de entrada y lo convierte a un lenguaje de máquina nativo para que pueda escribir su programa en el lenguaje A que compila en el lenguaje B que luego se compila en código máquina. En el mundo del microcontrolador ves esto mucho. Alguien quiere escribir programas en Basic o Java, por lo que escribe el compilador Basic/Java para producir código C para un compilador de C existente. A continuación, el código C resultante se compila en lenguaje de máquina que proporciona el compilador nativo de Basic/Java. Este enfoque generalmente es más fácil que escribir el compilador de Basic/Java directamente en código de máquina.
Hace muchos años escribí programas BasicA y GWBasic que producían código de ensamblaje para micros 6800 y Z80. Mi punto es que la salida no tiene que ser del mismo estilo que la entrada o el objetivo. ES DECIR. El hecho de que esté escribiendo una JVM en Java no significa que el resultado final deba ejecutarse bajo una Java JVM.
¿No fue el primer compilador de C++ escrito por Bjarne Stroustroup en C++ (cuando aún se llamaba "C With Classes")? Lo que consideraría aún más impresionante, ya que C++ no es un lenguaje interpretado sino que requiere un compilador. – Matthias
Que es precisamente lo que no entiendo :) – kji
El Nuevo Libro del Dragón, Primera Edición (aléjate de la segunda edición cargada de errores) explica el arranque del compilador. –