Shika XS accessor

ShikaにXS Accessorを実装したのでClass::XSAccessorと比較してみました。

Shika/trunk $ perl -Mblib benchmark/accessor.pl
Perl 5.008005 on linux
Shika/0.01_01
Moose/0.63
Class::XSAccessor/0.14
------------------ new,set,get*10
           Rate ShikaPP   Moose ShikaXS   CXSAc
ShikaPP 27568/s      --     -5%    -51%    -62%
Moose   28981/s      5%      --    -48%    -60%
ShikaXS 56220/s    104%     94%      --    -22%
CXSAc   72404/s    163%    150%     29%      --
------------------ set
            Rate   Moose ShikaPP   CXSAc ShikaXS
Moose    51199/s      --    -20%    -51%    -54%
ShikaPP  64239/s     25%      --    -39%    -42%
CXSAc   105411/s    106%     64%      --     -5%
ShikaXS 111348/s    117%     73%      6%      --
------------------ get
            Rate ShikaPP   Moose   CXSAc ShikaXS
ShikaPP  43530/s      --    -20%    -61%    -71%
Moose    54612/s     25%      --    -51%    -63%
CXSAc   111348/s    156%    104%      --    -25%
ShikaXS 148945/s    242%    173%     34%      --

new()を含む場合,さすがにクラス階層を走査するShikaはXSAccessorに負けますが,それ以外の場合はまったく引けをとりません*1

*1:getの該当部分のコードが実際にはShikaのほうが少しだけ複雑なので,+6%は完全に誤差の範囲内です。また,setでShikaが勝るのは,おそらくXSAccessorが戻り値をXPUSHs()しているためで,これはたぶんそのうち最適化されるでしょう。