X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=benchmarks%2Fcaf_vs_moose.pl;h=2634484e9125536a64b758955618713ba3017802;hb=ea77684a76e30c02b0cd5512e322e6e29a6ac8e3;hp=55a3e0f27b5d54dffa34b7783d6acdc3dbd70c00;hpb=b584a6bc1ee3a3edae8b60b98973131d12d5c709;p=gitmo%2FMoose.git diff --git a/benchmarks/caf_vs_moose.pl b/benchmarks/caf_vs_moose.pl index 55a3e0f..2634484 100644 --- a/benchmarks/caf_vs_moose.pl +++ b/benchmarks/caf_vs_moose.pl @@ -2,69 +2,65 @@ ### MODULES -package MooseHorse; -use Moose; -has foo => (is => 'rw'); -no Moose; - -package MooseHorseImmut; -use Moose; -has foo => (is => 'rw'); -__PACKAGE__->meta->make_immutable(); -no Moose; - -package MooseHorseImmutNoConst; -use Moose; -has foo => (is => 'rw'); -__PACKAGE__->meta->make_immutable(inline_constructor => 0); -no Moose; - - -package CAFHorse; -use warnings; -use strict; -use base 'Class::Accessor::Fast'; -__PACKAGE__->mk_accessors(qw(foo)); - - -package main; -use warnings; -use strict; +{ + package PlainMoose; + use Moose; + has foo => (is => 'rw'); +} +{ + package MooseImmutable; + use Moose; + has foo => (is => 'rw'); + __PACKAGE__->meta->make_immutable(); +} +{ + package MooseImmutable::NoConstructor; + use Moose; + has foo => (is => 'rw'); + __PACKAGE__->meta->make_immutable(inline_constructor => 0); +} +{ + package ClassAccessorFast; + use warnings; + use strict; + use base 'Class::Accessor::Fast'; + __PACKAGE__->mk_accessors(qw(foo)); +} use Benchmark qw(cmpthese); use Benchmark ':hireswallclock'; -my $moose = MooseHorse->new; -my $moose_immut = MooseHorseImmut->new; -my $moose_immut_no_const = MooseHorseImmutNoConst->new; -my $caf = CAFHorse->new; +my $moose = PlainMoose->new; +my $moose_immut = MooseImmutable->new; +my $moose_immut_no_const = MooseImmutable::NoConstructor->new; +my $caf = ClassAccessorFast->new; -my $acc_rounds = 1_000_000; -my $ins_rounds = 1_000_000; +my $acc_rounds = 100_000; +my $ins_rounds = 100_000; print "\nSETTING\n"; cmpthese($acc_rounds, { - Moose => sub { $moose->foo(23) }, - MooseImmut => sub { $moose_immut->foo(23) }, - MooseImmutNoConst => sub { $moose_immut_no_const->foo(23) }, - CAF => sub { $caf->foo(23) }, + Moose => sub { $moose->foo(23) }, + MooseImmutable => sub { $moose_immut->foo(23) }, + MooseImmutableNoConstructor => sub { $moose_immut_no_const->foo(23) }, + ClassAccessorFast => sub { $caf->foo(23) }, }, 'noc'); print "\nGETTING\n"; cmpthese($acc_rounds, { - Moose => sub { $moose->foo }, - MooseImmut => sub { $moose_immut->foo }, - MooseImmutNoConst => sub { $moose_immut_no_const->foo }, - CAF => sub { $caf->foo }, + Moose => sub { $moose->foo }, + MooseImmutable => sub { $moose_immut->foo }, + MooseImmutableNoConstructor => sub { $moose_immut_no_const->foo }, + ClassAccessorFast => sub { $caf->foo }, }, 'noc'); my (@moose, @moose_immut, @moose_immut_no_const, @caf_stall); print "\nCREATION\n"; cmpthese($ins_rounds, { - Moose => sub { push @moose, MooseHorse->new(foo => 23) }, - MooseImmut => sub { push @moose_immut, MooseHorseImmut->new(foo => 23) }, - MooseImmutNoConst => sub { push @moose_immut_no_const, MooseHorseImmutNoConst->new(foo => 23) }, - CAF => sub { push @caf_stall, CAFHorse->new({foo => 23}) }, + Moose => sub { push @moose, PlainMoose->new(foo => 23) }, + MooseImmutable => sub { push @moose_immut, MooseImmutable->new(foo => 23) }, + MooseImmutableNoConstructor => sub { push @moose_immut_no_const, MooseImmutable::NoConstructor->new(foo => 23) }, + ClassAccessorFast => sub { push @caf_stall, ClassAccessorFast->new({foo => 23}) }, }, 'noc'); my ( $moose_idx, $moose_immut_idx, $moose_immut_no_const_idx, $caf_idx ) = ( 0, 0, 0, 0 ); @@ -74,15 +70,15 @@ cmpthese($ins_rounds, { $moose[$moose_idx] = undef; $moose_idx++; }, - MooseImmut => sub { + MooseImmutable => sub { $moose_immut[$moose_immut_idx] = undef; $moose_immut_idx++; }, - MooseImmutNoConst => sub { + MooseImmutableNoConstructor => sub { $moose_immut_no_const[$moose_immut_no_const_idx] = undef; $moose_immut_no_const_idx++; }, - CAF => sub { + ClassAccessorFast => sub { $caf_stall[$caf_idx] = undef; $caf_idx++; },