saber que programacion maquina interprete ejemplos como java jvm bootstrapping

que - Cómo se puede escribir una JVM en Java



que es jvm en programacion (10)

Aquí hay un buen documento sobre el arranque de una máquina virtual alojada en uno mismo. No es Java, sino javascript, pero los principios son los mismos.

Bootstrapping de una máquina virtual de búsqueda alojada en sí mismo para JavaScript: un informe de experiencia

Tenga en cuenta que, si bien el arranque de un compilador autohospedado y el arranque de una máquina virtual alojada en sí mismo son algo similares, creo que no plantean exactamente los mismos desafíos.

Estuve leyendo brevemente sobre Maxine que es una implementación de JVM de código abierto escrita en Java. Esto me suena circular. Si Java requiere que se ejecute una máquina virtual, ¿cómo puede escribirse la máquina virtual en Java (el código de la VM no necesita una VM para ejecutarse, etc.?).

Editar : Ok, veo que pasé por alto el hecho de que Java no tiene que ejecutarse en una máquina virtual. ¿Cómo se explica cómo se puede escribir un compilador LISP en LISP? ¿O debería ser esta una pregunta nueva por completo?


Eché un vistazo a Maxine la semana pasada y me preguntaba lo mismo :)

De la documentation Maxine:

1 Construyendo la imagen de arranque

Ahora construyamos una [imagen de arranque]. En este paso, Maxine se ejecuta en una JVM de host para configurar un prototipo, luego compila su propio código y datos para crear un programa ejecutable para la plataforma de destino.

2 corriendo Maxine

Ahora que Maxine se compiló a sí misma, podemos ejecutarlo como una VM Java estándar. El comando max vm maneja los detalles de las rutas de clase y biblioteca y proporciona una interfaz similar al comando java launcher estándar.


El código de Java se puede compilar directamente en código de máquina para que no se necesite una máquina virtual.


Es un poco ''whooaoaaa hombre, ¿cómo puede funcionar eso?'' - pero creo que estás describiendo el fenómeno conocido como ''autohospedaje'':

Los lenguajes (o toolchains / plataformas) no comienzan como autohospedaje: comienzan una vida construida en una plataforma existente: en cierto punto se vuelven lo suficientemente funcionales como para permitir que se escriban programas que entiendan la sintaxis que ellos mismos pasa a estar escrito en.

Hay un gran ejemplo en el clásico libro de AWK, que presenta un programa AWK que puede analizar (una versión simplificada) otros programas AWK: ver el enlace a continuación.

Hay otro ejemplo en el libro "Beautiful Code" que tiene un programa Javascript que puede analizar Javascript.

Creo que hay que recordar algo sobre esto, si tiene (por ejemplo) una JVM escrita en Java que puede ejecutar código de Java Byte: la JVM que ejecuta Java JVM tiene que ser alojada de forma nativa (quizás esta JVM fue escrita en ''C ''y luego compilado en código máquina): esto es cierto en cualquier caso de un programa de autohospedaje eventualmente, en algún lugar a lo largo de la línea.

Entonces se elimina el misterio, porque en algún punto, hay un programa de código máquina nativo que se ejecuta debajo de todo.

Es un poco equivalente de poder describir el idioma inglés (etc) usando el idioma inglés en sí ... quizás ...

http://www.amazon.co.uk/AWK-Programming-Language-Alfred-Aho/dp/020107981X/ref=sr_1_fkmr0_3?ie=UTF8&qid=1266397076&sr=8-3-fkmr0

http://www.amazon.co.uk/gp/search/ref=a9_sc_1?rh=i%3Astripbooks%2Ck%3Abeautiful+code&keywords=beautiful+code&ie=UTF8&qid=1266397435

http://en.wikipedia.org/wiki/Self-hosting



La JVM que necesita para arrancar una JVM escrita en Java probablemente no necesita muchas funciones (como recolección de basura y JIT), podría ser muy simple. Todas las características más avanzadas podrían implementarse en Java (que parece ser exactamente el punto de Maxine, para experimentar con nuevas ideas en tecnología JVM).

Además, Maxine contiene código C, que supongo que conforma un entorno de tiempo de ejecución mínimo que se utiliza para que el resto de Maxine funcione. Considero que los bits interesantes (compilador JIT, recolección de basura) se implementan completamente en Java.


Puede echarle un vistazo al método bien establecido de arranque de compiladores. Creo que comenzó en los años 70 ...


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 ensamblador para micros 6800 y Z80. Mi punto es que la salida no tiene que ser del mismo estilo que la entrada o el objetivo. IE Solo porque está escribiendo una JVM en Java no significa que el resultado final deba ejecutarse bajo una Java JVM.