6

Existen varios idiomas/tiempos de ejecución de la cima de la JVM: como JRuby, maravilloso, Jython, Clojure, Rhino, Scala, y así sucesivamente ...¿Cómo generan los lenguajes/tiempos de ejecución basados ​​en JVM un bytecode de Java?

  • ¿Cómo generan estos bytecode Java?
  • ¿Hay bibliotecas estandarizadas por hacer esto?
  • ¿Cómo se genera el bytecode generado ejecutado?

(O es mi suposición errónea, y algunos de los idiomas mencionados hacen no generar código de bytes?)

Respuesta

9

Algunos de ellos generar código de bytes. Algunos tienen un sistema de ejecución que se ejecuta como un intérprete. Algunos tienen una mezcla de los dos. La JVM es, después de todo, una CPU (que simplemente no existe en realidad) con una cierta arquitectura y un cierto conjunto de instrucciones. Lo enfoca con su generador de código de la misma manera que genera el código objeto para cualquier CPU. (Ahora, para ser justos, su conjunto de instrucciones está muy centrado en las capacidades y necesidades de Java, pero aún es lo suficientemente general como para admitir otros modelos. Apenas.)

Hay una variedad de maneras de generar código de byte JVM. Puede transferir sus propias rutinas de generación de archivos .class (ya que el formato y el conjunto de instrucciones es well-specified). Puede usar varias bibliotecas como ASM o BCEL (que es el enfoque más común, creo). O puede generar código Java como representación intermedia y luego compilarlo con las herramientas Java habituales.

Ejecuta el código de la misma forma que ejecuta el código compilado en Java: el tiempo de ejecución Java carga los archivos .class generados y comienza a ejecutarse. Todo esto es parte del specification también.

Cuestiones relacionadas