Github makes perl core hacking easier!
id:tokuhiromに促されてperlコアにMoose XSへ向けた拡張を書いてみたのだが,githuのおかげでパッチを書くのが簡単にできた。forkして,トピックブランチを作って*1,コードを書いて,テストして,p5p mailing listにポストして終わり。こんなに簡単だとは思わなかったので,今後はもっと積極的に取り組みたい。
さて,今回行った修正は,XSのからPerlのメソッドの呼び出しを高速化するというものだ。XS内で大量にメソッドを呼びまくるMoose XSにとっては非常に有効だと思われる。この修正の効果は,Pure Perlでも測ることができるので,ベンチマークをとってみた。
Result:
blead: pp_method 2733378/s -- -17% pp_method_named 3276799/s 20% -- tweak/method: pp_method 3418041/s -- -7% pp_method_named 3674916/s 8% --
予測では,Perl_call_method()が使用するPPコードであるpp_method*2が高速になっているはずである。これは2733378/sから3418041/sなので,25%ほど高速になっており,大成功といえる。
一方,なぜか普通のメソッド呼び出しを実行するpp_method_named*3までも10%ほど速くなっているように見えるが,その理由は定かではない。今回の修正でpp_method_namedの実装が非常に単純になったので,そのせいで高速になったのかもしれない。もっとも,これが遅くなったのなら苦しいが,速くなる分には問題はないだろう。
Script:
#!perl -w -Ilib use strict; use Benchmark qw(:all); { package Foo; sub bar{ 42 } } my $foo = bless {}, 'Foo'; my $meth = 'bar'; cmpthese -1 => { pp_method_named => sub{ $foo->bar(); }, pp_method => sub{ $foo->$meth(); }, }; __END__