JITは、バイトコードインタープリタとは異なります。
は、次のC関数を考えてみましょう:
int sum() {
return 5 + 6;
}
これは、直接マシンコードをコンパイルされます。 x86とARMプロセッサの正確な指示は異なるでしょう。
私たちは、基本的なバイトコードインタプリタを書いた場合は、次のようになります。
for(;;) {
switch(*currentInstruction++) {
case OP_PUSHINT:
*stack++ = nextInt(currentInstruction);
break;
case OP_ADD:
--stack;
stack[-1].add(*stack);
break;
case OP_RETURN:
return stack[-1];
}
}
これは、その後、次の命令のセットを解釈することができます:あなたはバイトコードインタプリタをコンパイルした場合
OP_PUSHINT (5)
OP_PUSHINT (6)
OP_ADD
OP_RETURN
をx86またはARMの両方であれば、インタプリタを書き直すことなく同じバイトコードを実行することができます。
あなたはバイトコードインタプリタは、プロセッサ固有の命令を発するようにC++コンパイラに依存しているのに対し、サポートされている各プロセッサのためのプロセッサ固有の命令(マシンコード)を放出する必要があるだろうJITコンパイラを書いた場合。
"構文解析された命令"抽象構文木の表現に? – none