色々すごい。言語実装者が AST ジェネレータと AST インタプリタを Truffle というフレームワーク上で実装すると、 JIT コンパイラが生成される…ようだ。動的型言語の type specialization などは AST の上で行われる。試してみないと Truffle が Java のコードを直接読んで色々するのか、ライブラリとして実装されているのかすらよく分からない。
LLVM Bitcode も変換できると書いてあって、 irreducible CFG の扱いが気になる。
Bringing Low-Level Languages to the JVM: Efficient Execution of LLVM IR on Truffle
int bci = 0;
while (bci != -1)
bci = blocks[bci].execute();
Relooper のようなアルゴリズムは使わないようだ。このディスパッチ部分は特別扱いされるの?