Interpréter quelque chose et exécuter le code temporel généré en Java?
-
20-08-2019 - |
Question
J'écris un interprète jouet avec un REPL en Java. J'aimerais générer du bytecode à partir du langage et l'exécuter, au lieu d'interpréter un AST et de l'exécuter à la place.
Étant donné que mon Java est un peu rouillé, est-il possible d'exécuter à la volée le code temporel généré sur la machine virtuelle?
La solution
Vous pouvez utiliser java.lang.Classloader.defineClass (), qui convertit le bytecode en objet Class. Vous pouvez appeler newInstance () sur l’objet Class résultant et vous partez.
Autres conseils
Jetez un coup d'œil à Javassist qui contient un compilateur d'extraits vous permettant de compiler des extraits Java en bytecode et les définir en tant que méthode dans une classe que vous pouvez ensuite appeler.