The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

PURPOSE

Compares the speed of the constructor in six equivalent classes built using different tools:

Moo_MXTML

Moo with MooX::Types::MooseLike::Base types.

Moo_TT

Moo with Type::Tiny types.

Moose

Moose with Moose type constraints. Class is made immutable.

Moose_TT

Moose with Type::Tiny type constraints. Class is made immutable.

Mouse

Mouse with Mouse type constraints. Class is made immutable. XS is switched off using MOUSE_PUREPERL environment variable.

Mouse_TT

Mouse with Type::Tiny type constraints. Class is made immutable. XS is switched off using MOUSE_PUREPERL environment variable.

Each tool is used to define a class like the following:

   {
      package Local::Class;
      use Whatever::Tool;
      use Types::Standard qw(HashRef ArrayRef Int);
      has attr1 => (is  => "ro", isa => ArrayRef[Int]);
      has attr2 => (is  => "ro", isa => HashRef[ArrayRef[Int]]);
   }

Then we benchmark the following object instantiation:

   Local::Class->new(
      attr1  => [1..10],
      attr2  => {
         one   => [0 .. 1],
         two   => [0 .. 2],
         three => [0 .. 3],
      },
   );

RESULTS

In all cases, Type::Tiny type constraints are clearly faster than the conventional approach.

With Type::Tiny::XS:

              Rate Moo_MXTML     Mouse     Moose    Moo_TT  Moose_TT  Mouse_TT
 Moo_MXTML  2428/s        --      -35%      -57%      -82%      -90%      -91%
 Mouse      3759/s       55%        --      -33%      -72%      -85%      -86%
 Moose      5607/s      131%       49%        --      -58%      -78%      -79%
 Moo_TT    13274/s      447%      253%      137%        --      -48%      -51%
 Moose_TT  25358/s      945%      575%      352%       91%        --       -7%
 Mouse_TT  27306/s     1025%      626%      387%      106%        8%        --

Without Type::Tiny::XS:

             Rate Moo_MXTML     Mouse    Moo_TT     Moose  Moose_TT  Mouse_TT
 Moo_MXTML 2610/s        --      -31%      -56%      -56%      -67%      -67%
 Mouse     3759/s       44%        --      -36%      -37%      -52%      -52%
 Moo_TT    5894/s      126%       57%        --       -1%      -24%      -25%
 Moose     5925/s      127%       58%        1%        --      -24%      -25%
 Moose_TT  7802/s      199%      108%       32%       32%        --       -1%
 Mouse_TT  7876/s      202%      110%       34%       33%        1%        --

(Tested versions: Type::Tiny 0.045_03, Type::Tiny::XS 0.004, Moose 2.1207, Moo 1.005000, MooX::Types::MooseLike 0.25, and Mouse 2.3.0)

DEPENDENCIES

To run this script, you will need:

Type::Tiny::XS, Moo, MooX::Types::MooseLike::Base, Moose, Mouse.

AUTHOR

Toby Inkster <tobyink@cpan.org>.

COPYRIGHT AND LICENCE

This software is copyright (c) 2013-2014, 2017 by Toby Inkster.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.