App::Benchmark::Accessorsでアクセッサのベンチマーク

App::Benchmark::AccessorsにMouseのmake_immutableを追加してはかってみた(hanecomさんには、パッチは送り済み。)。マニアックなものがやたらに含まれているので、結果は自分が必要な物だけ抜粋。

大体直感的にはあうんだけど、Mouseはgetter, setterともはimmutableのほうが遅いっていうのが直感とあわないな。


getter

#                             Rate mojo moose mouse_immutable mouse moose_immutable class_accessor_fast class_accessor_fast_xs class_xsaccessor class_xsaccessor_array
# mojo                    974659/s   --  -15%            -19%  -23%            -23%                -24%                   -50%             -58%                   -61%
# moose                  1146789/s  18%    --             -5%   -9%             -9%                -11%                   -42%             -51%                   -54%
# mouse_immutable        1201923/s  23%    5%              --   -5%             -5%                 -6%                   -39%             -49%                   -52%
# mouse                  1262626/s  30%   10%              5%    --             -0%                 -2%                   -36%             -46%                   -49%
# moose_immutable        1262626/s  30%   10%              5%    0%              --                 -2%                   -36%             -46%                   -49%
# class_accessor_fast    1282051/s  32%   12%              7%    2%              2%                  --                   -35%             -45%                   -49%
# class_accessor_fast_xs 1968504/s 102%   72%             64%   56%             56%                 54%                     --             -16%                   -21%
# class_xsaccessor       2336449/s 140%  104%             94%   85%             85%                 82%                    19%               --                    -7%
# class_xsaccessor_array 2500000/s 157%  118%            108%   98%             98%                 95%                    27%               7%                     --

setter

#                             Rate moose moose_immutable mojo class_accessor_fast mouse_immutable mouse class_xsaccessor class_xsaccessor_array class_accessor_fast_xs
# moose                   821355/s    --             -1%  -3%                -14%            -22%  -32%             -53%                   -60%                   -60%
# moose_immutable         833333/s    1%              --  -2%                -13%            -21%  -31%             -53%                   -59%                   -59%
# mojo                    847458/s    3%              2%   --                -11%            -19%  -30%             -52%                   -58%                   -59%
# class_accessor_fast     954654/s   16%             15%  13%                  --             -9%  -21%             -46%                   -53%                   -53%
# mouse_immutable        1049869/s   28%             26%  24%                 10%              --  -13%             -40%                   -49%                   -49%
# mouse                  1204819/s   47%             45%  42%                 26%             15%    --             -31%                   -41%                   -41%
# class_xsaccessor       1754386/s  114%            111% 107%                 84%             67%   46%               --                   -14%                   -14%
# class_xsaccessor_array 2040816/s  148%            145% 141%                114%             94%   69%              16%                     --                    -1%
# class_accessor_fast_xs 2051282/s  150%            146% 142%                115%             95%   70%              17%                     1%                     --

# mouseがclass_accessor_fastと同等の速度程度がでているかというのだけ確認しときたかったのでした。

# hasの実装だと、mouse_immutableもmouseも実行速度がかわるはずないな... ということで、ベンチの結果は単なる誤差だなぁ。