Faster.pm の中身の話
mlehmann の Faster.pm という Perl 用 JIT があるのだが、これの仕組み。
- op_entersub をフックする
- op_entersub にはいるタイミングで発動!
- op tree を C のコードに変換する
- cc する
- dynaloader でよみこむ
といった具合。基本的には Shibuya.pm で発表済のだれでもしっているようなテクニックをつかっている。
これはだいたい 20% ぐらいはやくなるらしい。まあ妥当なかんじか。とはいえテストとおらないしまともにうごかないので、本当かどうかはわからない。
結局 run_ops まわりの部分がインラインで最適化されるという点におけるメリットぐらいで、各 opcode の操作はそれぞれの中でやっているわけだから、納得できる数字かとおもう。ただ、実際にそのテストにつかったコードってのがないんで、なんともいえないけど。
実用という点で評価した場合、Faster.pm は op_entersub をフックしているのがきびしい。せめて lexical scope でうごくか、optimize(\&code) のような形式になる方が使いやすいのではないか。