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()しているためで,これはたぶんそのうち最適化されるでしょう。