Commit | Line | Data |
b584a6bc |
1 | #!perl |
2 | |
3 | ### MODULES |
4 | |
5 | package MooseHorse; |
6 | use Moose; |
7 | has foo => (is => 'rw'); |
8 | no Moose; |
9 | |
10 | package MooseHorseImmut; |
11 | use Moose; |
12 | has foo => (is => 'rw'); |
13 | __PACKAGE__->meta->make_immutable(); |
14 | no Moose; |
15 | |
16 | package MooseHorseImmutNoConst; |
17 | use Moose; |
18 | has foo => (is => 'rw'); |
19 | __PACKAGE__->meta->make_immutable(inline_constructor => 0); |
20 | no Moose; |
21 | |
22 | |
23 | package CAFHorse; |
24 | use warnings; |
25 | use strict; |
26 | use base 'Class::Accessor::Fast'; |
27 | __PACKAGE__->mk_accessors(qw(foo)); |
28 | |
29 | |
30 | package main; |
31 | use warnings; |
32 | use strict; |
33 | |
34 | use Benchmark qw(cmpthese); |
35 | use Benchmark ':hireswallclock'; |
36 | |
37 | my $moose = MooseHorse->new; |
38 | my $moose_immut = MooseHorseImmut->new; |
39 | my $moose_immut_no_const = MooseHorseImmutNoConst->new; |
40 | my $caf = CAFHorse->new; |
41 | |
42 | my $acc_rounds = 1_000_000; |
43 | my $ins_rounds = 1_000_000; |
44 | |
45 | print "\nSETTING\n"; |
46 | cmpthese($acc_rounds, { |
47 | Moose => sub { $moose->foo(23) }, |
48 | MooseImmut => sub { $moose_immut->foo(23) }, |
49 | MooseImmutNoConst => sub { $moose_immut_no_const->foo(23) }, |
50 | CAF => sub { $caf->foo(23) }, |
51 | }, 'noc'); |
52 | |
53 | print "\nGETTING\n"; |
54 | cmpthese($acc_rounds, { |
55 | Moose => sub { $moose->foo }, |
56 | MooseImmut => sub { $moose_immut->foo }, |
57 | MooseImmutNoConst => sub { $moose_immut_no_const->foo }, |
58 | CAF => sub { $caf->foo }, |
59 | }, 'noc'); |
60 | |
61 | my (@moose, @moose_immut, @moose_immut_no_const, @caf_stall); |
62 | print "\nCREATION\n"; |
63 | cmpthese($ins_rounds, { |
64 | Moose => sub { push @moose, MooseHorse->new(foo => 23) }, |
65 | MooseImmut => sub { push @moose_immut, MooseHorseImmut->new(foo => 23) }, |
66 | MooseImmutNoConst => sub { push @moose_immut_no_const, MooseHorseImmutNoConst->new(foo => 23) }, |
67 | CAF => sub { push @caf_stall, CAFHorse->new({foo => 23}) }, |
68 | }, 'noc'); |
69 | |
70 | my ( $moose_idx, $moose_immut_idx, $moose_immut_no_const_idx, $caf_idx ) = ( 0, 0, 0, 0 ); |
71 | print "\nDESTRUCTION\n"; |
72 | cmpthese($ins_rounds, { |
73 | Moose => sub { |
74 | $moose[$moose_idx] = undef; |
75 | $moose_idx++; |
76 | }, |
77 | MooseImmut => sub { |
78 | $moose_immut[$moose_immut_idx] = undef; |
79 | $moose_immut_idx++; |
80 | }, |
81 | MooseImmutNoConst => sub { |
82 | $moose_immut_no_const[$moose_immut_no_const_idx] = undef; |
83 | $moose_immut_no_const_idx++; |
84 | }, |
85 | CAF => sub { |
86 | $caf_stall[$caf_idx] = undef; |
87 | $caf_idx++; |
88 | }, |
89 | }, 'noc'); |
90 | |
91 | |