Commit | Line | Data |
1e582397 |
1 | #!perl |
2 | |
3 | ### MODULES |
4 | |
5 | |
6 | { |
7 | package PlainMoose; |
8 | use Moose; |
9 | has foo => (is => 'rw'); |
10 | __PACKAGE__->meta->make_immutable(); |
11 | } |
12 | { |
13 | package PlainMouse; |
14 | use Mouse; |
15 | has foo => (is => 'rw'); |
16 | __PACKAGE__->meta->make_immutable(); |
17 | } |
18 | { |
19 | package ClassAccessorFast; |
20 | use warnings; |
21 | use strict; |
22 | use base 'Class::Accessor::Fast'; |
23 | __PACKAGE__->mk_accessors(qw(foo)); |
24 | } |
25 | |
26 | use Benchmark qw(cmpthese); |
27 | |
28 | my $moose = PlainMoose->new; |
29 | my $mouse = PlainMouse->new; |
30 | my $caf = ClassAccessorFast->new; |
31 | |
32 | |
33 | print "\nSETTING\n"; |
34 | cmpthese(-1, { |
35 | Moose => sub { $moose->foo(23) }, |
36 | Mouse => sub { $mouse->foo(23) }, |
37 | ClassAccessorFast => sub { $caf->foo(23) }, |
38 | }, 'noc'); |
39 | |
40 | print "\nGETTING\n"; |
41 | cmpthese(-1, { |
42 | Moose => sub { $moose->foo }, |
43 | Mouse => sub { $mouse->foo }, |
44 | ClassAccessorFast => sub { $caf->foo }, |
45 | }, 'noc'); |
46 | |
47 | my (@moose, @moose_immut, @mouse, @mouse_immut, @caf_stall); |
48 | print "\nCREATION\n"; |
49 | cmpthese(1_000_000, { |
50 | Moose => sub { push @moose, PlainMoose->new(foo => 23) }, |
51 | Mouse => sub { push @mouse, PlainMouse->new(foo => 23) }, |
52 | ClassAccessorFast => sub { push @caf_stall, ClassAccessorFast->new({foo => 23}) }, |
53 | }, 'noc'); |
54 | |
55 | my ( $moose_idx, $mouse_idx, $caf_idx ) = ( 0, 0, 0, 0 ); |
56 | print "\nDESTRUCTION\n"; |
57 | cmpthese(1_000_000, { |
58 | Moose => sub { |
59 | $moose[$moose_idx] = undef; |
60 | $moose_idx++; |
61 | }, |
62 | Mouse => sub { |
63 | $mouse[$mouse_idx] = undef; |
64 | $mouse_idx++; |
65 | }, |
66 | ClassAccessorFast => sub { |
67 | $caf_stall[$caf_idx] = undef; |
68 | $caf_idx++; |
69 | }, |
70 | }, 'noc'); |
71 | |
72 | |