6

Il y a plusieurs langues/runtimes au sommet de la machine virtuelle Java: tels que JRuby, Groovy, Jython, Clojure, Rhino, Scala, et ainsi de suite ...Comment les langages/runtimes basés sur JVM génèrent-ils le bytecode Java?

  • Comment ces génèrent Java bytecode?
  • Y a-t-il des bibliothèques normalisées pour cela?
  • Comment le bytecode généré obtient exécuté?

(Ou est mon hypothèse erronée, et certaines des langues mentionnées ne pas générer bytecode?)

Répondre

9

Certains d'entre eux générer bytecode. Certains ont un système d'exécution qui s'exécute en tant qu'interprète. Certains ont un mélange des deux. La JVM est, après tout, une CPU (qui n'existe pas vraiment) avec une certaine architecture et un certain ensemble d'instructions. Vous le ciblez avec votre générateur de code de la même manière que vous générez du code objet pour n'importe quel CPU. (Maintenant, pour être honnête, son jeu d'instructions est très fortement axé sur les capacités et les besoins de Java, mais il est encore assez général pour supporter d'autres modèles.)

Il existe plusieurs façons de générer du code octet JVM. Vous pouvez personnaliser vos propres routines de génération de fichier .class (puisque le format et le jeu d'instructions sont well-specified). Vous pouvez utiliser un certain nombre de bibliothèques comme ASM ou BCEL (ce qui est l'approche la plus courante, je pense). Vous pouvez également générer du code Java en tant que représentation intermédiaire, puis le compiler avec les outils Java habituels.

Vous exécutez le code de la même manière que vous exécutez un code Java: l'environnement d'exécution Java charge les fichiers .class générés et commence à s'exécuter. Cela fait également partie du specification.