Angelos::Class::Mixinableのベンチ

Mouseにして早いのかな

benchmark script

#!/usr/bin/perl

use warnings;
use strict;
use FindBin;
use File::Spec;
use Benchmark qw(:all) ;
use lib (File::Spec->catfile($FindBin::Bin,'./../lib'),File::Spec->catfile($FindBin::Bin,'lib') );
use Angel;
use Moo;
use Normal;
cmpthese( 1000 , {
    angelos => \&angel,
    moose   => \&moo,
    normal  => \&normal,
});

{
     my $angel = Angel->new();
    $angel->load_mixin('Book');
     my $moo = Moo->new();
    $moo->load_plugin('Book');
     my $normal = Normal->new();
    cmpthese( 1000, {
        angelos => sub { $angel->reading },
        moose   => sub { $moo->reading } ,
        normal  => sub { $normal->reading } ,,
    });


}
sub angel {
    my $angel = Angel->new();
    $angel->load_mixin('Book');
    $angel->reading();
}
sub moo {
    my $moo = Moo->new();
    $moo->load_plugin('Book');
    $moo->reading();
}

sub normal {
    my $normal = Normal->new();
   $normal->reading();
}

angelos

package Angel;
use Mouse;
with 'Angelos::Class::Mixinable';
1;
package Angel::Mixin::Book;
use Angelos::Mixin;
sub reading { 'reading' }
1;

moose

package Moo;
use Moose;
with 'MooseX::Object::Pluggable';
1;
package Moo::Plugin::Book;
use Moose::Role;
sub reading { 'reading' }
1;

normal

package Normal;

use warnings;
use strict;
sub new {
    my $class = shift;
    bless {}, $class;
}
sub reading { 'reading' }

1;

結果

                        Rate               moose             angelos      normal
moose                  505/s                  --                -28%       -100%
angelos                704/s                 39%                  --       -100%
normal  999999999999999872/s 198000000000000000% 141999999999999984%          --

                        Rate  normal angelos   moose
normal  999999999999999872/s      --      0%      0%
angelos 999999999999999872/s      0%      --      0%
moose   999999999999999872/s      0%      0%      --

ロードし終わったら全部なかよし。