最適化するのに相応しいサブルーチンのみ最適化できるように,optimizer::hotspotというモジュールを考えてみた。まだCPANクオリティではないのでgithubのみ。 http://github.com/gfx/Perl-optimizer-hotspot 仕組みとしては,PL_peeppをフックして,生成されるサブルーチンの頭にホットスポット計測のためのopcode*1を仕込み,そのopcodeが一定数呼ばれると,最適化器*2を起動するというものだ。 最適化の基本は,いまのところ特定パターンをもつ構文木を高速な一つのノードに置き換えるというもの。少し実装してみたところ,以下のような結果となった。 benchmarks/arbit.pl # 's' represents 'single-threaded' $ sperl -Mblib benchmarks/arbit.pl Pe