Class::C3がXSに対応したようなのでベンチとってみた

最近Develop版が頻繁にアップされていたClass::C3ですが、とうとう正規版がアップされましたね。

Class-C3-0.16

Class-C3-XS-0.02

ちなみにhttp://d.hatena.ne.jp/fbis/20070319/1174296128もFIXされてます。

ってことで速度的にどれくらいパワーアップしたのか気になったのでベンチとってみました。

ソースはこんな感じ。とりあえず比較のために普通にSUPER使った場合とのベンチ。

use Benchmark qw(cmpthese timethese :hireswallclock);

package MyBase;
sub new { bless {} , shift }
sub hoge { }

package MyChildNext;
use base qw/MyBase/;
use Class::C3;
sub hoge { shift->next::method() }

package MyChildSuper;
use base qw/MyBase/;
sub hoge { shift->SUPER::hoge() }

package main;

sub c3 {
    my $obj = MyChildNext->new;
    $obj->hoge;
}

sub super {
    my $obj = MyChildSuper->new;
    $obj->hoge;
}

cmpthese(10000, {
    'c3-v0.14' => \&c3,
    'super'    => \&super,
});

まずは前のバージョン(0.14)の時のベンチ結果は。

             Rate c3-v0.14    super
c3-v0.14  37594/s       --     -71%
super    128205/s     241%       --

で次に最新バージョン(0.16)のベンチ結果。

             Rate c3-v0.16    super
c3-v0.16  91743/s       --     -28%
super    128205/s      40%       --

うぉ。3倍くらい速くなってますね。

これはデカイ。

ここまで速いともはやSUPER使う必要性すらなくなってきそうな感じですね。全部next::methodでいいんじゃまいか?

とりあえずDBIx::Classとか使ってるならさっそくバージョンアップをオススメします。