2012-12-30 8 views
11

Nella piattaforma .NET è possibile scrivere direttamente un programma con Common Intermediate Language e compilare i sorgenti con IL Assembler (ILASM).È possibile scrivere direttamente un programma con istruzioni bytecode Java?

Ad esempio, il codice riportato sotto è il programma "Hello World".

.assembly Hello {} 
.assembly extern mscorlib {} 
.method static void Main() 
{ 
    .entrypoint 
    .maxstack 1 
    ldstr "Hello, world!" 
    call void [mscorlib]System.Console::WriteLine(string) 
    ret 
} 

E 'possibile che scrivere un programma con Java bytecode istruzioni direttamente come .NET?

+1

Ci è asm (http://asm.ow2.org/) per quello. – fge

+0

Non è una risposta alla tua domanda (che è sì, ma non semplice;)) ecco un bel post sul blog con i riferimenti http://arhipov.blogspot.se/2011/01/java-bytecode-fundamentals.html?m=1 –

+0

Perché qualcuno dovrebbe o deve farlo? Dato che si tratta di una macchina basata sullo stack, dubito che ci sia qualche trucco che il compilatore non sa già. – James

risposta

7

Puoi dare un'occhiata a Jasmin. Da Wikipedia,

Alcuni progetti forniscono assemblatori Java per abilitare la scrittura del bytecode Java a mano. Il codice assembly può anche essere generato dalla macchina, ad esempio dal compilatore che si rivolge alla Java virtual machine. Gli assemblatori Java notabili includono:

Jasmin, prende descrizioni testuali per le classi Java, scritte in una sintassi semplice come un assembly utilizzando il set di istruzioni Java Virtual Machine e genera un file di classe Java.

Jamaica, un linguaggio di macro assemblaggio per la macchina virtuale Java. La sintassi Java viene utilizzata per la definizione della classe o dell'interfaccia. I corpi dei metodi vengono specificati utilizzando le istruzioni bytecode.

Nota: non ho usato nessuno di questi strumenti personalmente.

+0

Questi strumenti possono essere utilizzati per incorporare istruzioni JVM inline in normale codice sorgente Java? – Philipp

+0

@Philipp - Non ho mai sentito parlare di una versione di javac che consentirebbe il linguaggio "assemblatore" inline. (Inoltre non sono sicuro di quanto bene/facilmente funzioni Jasmin dal ciclo di annotazione del ciclo.) –

6

Si potrebbe utilizzare Jasmin

.class public HelloWorld 
.super java/lang/Object 

.method public static main([Ljava/lang/String;)V 
.limit stack 3 
.limit locals 1 

    getstatic  java/lang/System/out Ljava/io/PrintStream; 
    ldc   "Hello World." 
    invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V 

return 

.end method 

Si compila utilizzando:

java-jar hello.j jasmin.jar

Si potrebbe fare riferimento anche this

Problemi correlati