Mouse type constraints in XS

MouseのXS化*1が進みつつあります。

0.40_04ではtype constraintsを全面的にXSで実装しました。生成されるコードを徹底的にXS化したため,かなり高速になりました。

以下はTC付きアクセサに値をセットする場合のベンチマークの結果です。

Mouse/benchmarks/type_constraints.pl:

Perl/5.10.1 in i686-linux

Moose/0.92 (Class::MOP/0.94)
Mouse/0.40_03
Class::XSAccessor/1.03

SETTING for simple attributes
                   Rate         Moose         Mouse C::XSAccessor
Moose          643109/s            --          -62%          -62%
Mouse         1686587/s          162%            --           -1%
C::XSAccessor 1703286/s          165%            1%            --

SETTING for attributes with type constraints 'Int'
                   Rate         Moose         Mouse C::XSAccessor
Moose          204799/s            --          -87%          -88%
Mouse         1531040/s          648%            --           -9%
C::XSAccessor 1686587/s          724%           10%            --

SETTING for attributes with type constraints 'Foo'
                   Rate         Moose         Mouse C::XSAccessor
Moose          194606/s            --          -79%          -88%
Mouse          927395/s          377%            --          -41%
C::XSAccessor 1571965/s          708%           70%            --

SETTING for attributes with type constraints 'ArrayRef[Int]'
                   Rate         Moose         Mouse C::XSAccessor
Moose           66991/s            --          -92%          -95%
Mouse          865569/s         1192%            --          -42%
C::XSAccessor 1485435/s         2117%           72%            --

TCを指定しない状態だとClass::XSAccessorとほぼ同じです。Intのような単純型だと約10%のロスですが,あまり変わりません。isaチェックやパラメータをとる型のように複雑なものだと速度はだいぶ落ちるものの,PurePerlであるMooseにTCを加えないものよりも高速です。

正規リリースはまだ先ですが,中間報告でした。

*1:XS実装はオプションであり,Pure Perlかつ依存モジュールなしというMouseポリシーは今後も守られます。