1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#!/usr/bin/env perl
use strict;
use warnings;
printf STDOUT 'perl: %s, Class::XSAccessor: %s%s', $], Class::XSAccessor->VERSION, $/;
package WithClassXSAccessor;
use blib;
use Class::XSAccessor {
constructor => 'new',
};
package WithStdClass;
sub new { my $c = shift; bless {@_}, ref($c) || $c }
package main;
use Benchmark qw(cmpthese timethese :hireswallclock);
my $count = shift || -4;
print "Constructor benchmark:", $/;
cmpthese(timethese($count, {
class_xs_accessor => sub {
my $obj;
$obj = WithClassXSAccessor->new();
$obj = WithClassXSAccessor->new();
$obj = WithClassXSAccessor->new();
$obj = WithClassXSAccessor->new();
$obj = WithClassXSAccessor->new();
$obj = WithClassXSAccessor->new();
$obj = WithClassXSAccessor->new();
$obj = WithClassXSAccessor->new();
$obj = WithClassXSAccessor->new();
$obj = WithClassXSAccessor->new();
},
std_class => sub {
my $obj;
$obj = WithStdClass->new();
$obj = WithStdClass->new();
$obj = WithStdClass->new();
$obj = WithStdClass->new();
$obj = WithStdClass->new();
$obj = WithStdClass->new();
$obj = WithStdClass->new();
$obj = WithStdClass->new();
$obj = WithStdClass->new();
$obj = WithStdClass->new();
},
class_xs_accessor_args => sub {
my $obj;
$obj = WithClassXSAccessor->new(foo => 'bar', baz => 'quux');
$obj = WithClassXSAccessor->new(foo => 'bar', baz => 'quux');
$obj = WithClassXSAccessor->new(foo => 'bar', baz => 'quux');
$obj = WithClassXSAccessor->new(foo => 'bar', baz => 'quux');
$obj = WithClassXSAccessor->new(foo => 'bar', baz => 'quux');
$obj = WithClassXSAccessor->new(foo => 'bar', baz => 'quux');
$obj = WithClassXSAccessor->new(foo => 'bar', baz => 'quux');
$obj = WithClassXSAccessor->new(foo => 'bar', baz => 'quux');
$obj = WithClassXSAccessor->new(foo => 'bar', baz => 'quux');
$obj = WithClassXSAccessor->new(foo => 'bar', baz => 'quux');
},
std_class_args => sub {
my $obj;
$obj = WithStdClass->new(foo => 'bar', baz => 'quux');
$obj = WithStdClass->new(foo => 'bar', baz => 'quux');
$obj = WithStdClass->new(foo => 'bar', baz => 'quux');
$obj = WithStdClass->new(foo => 'bar', baz => 'quux');
$obj = WithStdClass->new(foo => 'bar', baz => 'quux');
$obj = WithStdClass->new(foo => 'bar', baz => 'quux');
$obj = WithStdClass->new(foo => 'bar', baz => 'quux');
$obj = WithStdClass->new(foo => 'bar', baz => 'quux');
$obj = WithStdClass->new(foo => 'bar', baz => 'quux');
$obj = WithStdClass->new(foo => 'bar', baz => 'quux');
},
}));
|