Xslate with Direct Threaded Code

Ruby 1.9が採用しているVMの最適化手法に、Direct Threaded Codeというものがあるらしい。

ターゲットコードが大きくなる代わりにVMの実行ループがかなり速くなるようだ。これを、Xslateに採用しない手はない、ということで簡単に実装してみた。
ブランチ:direct_threaded_code
masterにマージした。0.1036からはコンパイラGCCのときに選択される。
実行ループ*1:http://gist.github.com/446673
従来のVMとパフォーマンスを比較すると、10%ほど高速化している。
従来のVM

$ perl benchmark/interpolate.pl
Perl/5.10.1 i686-linux
Text::Xslate/0.1035
Text::MicroTemplate/0.11
          Rate     mt  s///g xslate
mt      7314/s     --    -3%   -78%
s///g   7518/s     3%     --   -77%
xslate 32880/s   350%   337%     --

DTC:

$ perl -Mblib benchmark/interpolate.pl
(snip)
          Rate  s///g     mt xslate
s///g   7450/s     --    -1%   -80%
mt      7518/s     1%     --   -80%
xslate 37236/s   400%   395%     --

他のベンチマークをみても10%程度の改善である。場合によっては40-50%程度の改善がみられることもあるというが、ひとまず安定した効果は得られるようなので、とりあえずこれで行く。

*1:ビルド時に自動生成される