Sto cercando le implementazioni esistenti della seguente idea: supponiamo che qualcuno voglia scrivere i codici byte "assembly inline" all'interno di un normale programma Java (la maggior parte delle applicazioni rilevanti implicherebbe istruzioni dinamiche invocate che non lo sono altrimenti disponibile in Java). Un modo per fare questo potrebbe essere il seguente:"Assemblaggio in linea" per codici byte Java
void foo(boolean b) {
Label l1 = Asm.label();
Label l2 = Asm.label();
int i = Asm.no_int();
Asm._const(0);
Asm.store(i);
l1.bind();
Asm.load(i);
Asm.push(10);
Asm.if_cmpge(l2);
Asm.getstatic("java/lang/System", "out", "Ljava/io/PrintStream");
Asm.load(i);
Asm.invokevirtual("java/io/PrintStream", "println", "(I)V");
Asm.inc(i);
Asm._goto(l1);
l2.bind();
Asm._return();
}
Istruzioni sono codificati come chiamate API, allora avremmo bisogno di eseguire un normale compilatore Java, e quindi al post-processo il codice di byte e sostituire le chiamate API con istruzioni reali.
P.S. Sono a conoscenza di ASMifier di ASM Framework, non risolve il problema sopra indicato.
Non abbiamo l'interfaccia nativa Java per questo? – user2357112
JNI è per interfacce tra "implementazioni native" (realizzate in C, C++), sta chiedendo "bytecode in linea" – morgano
... oh! Bytecode in linea. Ho pensato che questa fosse una domanda su come integrare il linguaggio assembly reale in un programma Java. – user2357112