App::Benchmark::Accessors - Benchmark accessor generators


App-Benchmark-Accessors documentation Contained in the App-Benchmark-Accessors distribution.

Index


Code Index:

NAME

Top

App::Benchmark::Accessors - Benchmark accessor generators

VERSION

Top

version 1.110100

DESCRIPTION

Top

This distribution runs benchmarks on various accessor generators. The following generators are being benchmarked:

Moose

mutable and immutable

Mouse

mutable and immutable

Class::Accessor
Class::Accessor::Fast
Class::Accessor::Fast::XS
Class::XSAccessor::Compat
Class::Accessor::Complex
Class::Accessor::Constructor
Class::Accessor::Classy
Class::Accessor::Lite
Mojo::Base
Class::MethodMaker
Object::Tiny
Spiffy
Class::Spiffy
accessors
Class::XSAccessor
Class::XSAccessor::Array
Object::Tiny
Rose
Rubyish::Attribute

The benchmarks are being run as part of the test suite; see App::Benchmark. This way you can look at this distribution's CPAN testers page to see the benchmark results on many different platforms and for many different perl versions.

The t/construction.t file benchmarks object creation, t/get.t benchmarks getter methods and t/set.t benchmarks setter methods.

Not every benchmark is run on every module; for example, Object::Tiny doesn't create setter methods, and accessors doesn't generate constructors.

Each benchmark test file takes an optional numeric parameter that is used as the number of iterations.

It's probably a good idea not to read too much into these benchmarks; they could be seen as micro-optimization. However, if you have a complex object hierarchy and create lots of objects and run many many getters/setters on them, they could help to save some time. But be sure to use Devel::NYTProf first to see where your real bottlenecks are.

INSTALLATION

Top

See perlmodinstall for information and options on installing Perl modules.

BUGS AND LIMITATIONS

Top

No bugs have been reported.

Please report any bugs or feature requests through the web interface at http://rt.cpan.org/Public/Dist/Display.html?Name=App-Benchmark-Accessors.

AVAILABILITY

Top

The latest version of this module is available from the Comprehensive Perl Archive Network (CPAN). Visit http://www.perl.com/CPAN/ to find a CPAN site near you, or see http://search.cpan.org/dist/App-Benchmark-Accessors/.

The development version lives at http://github.com/hanekomu/App-Benchmark-Accessors and may be cloned from git://github.com/hanekomu/App-Benchmark-Accessors.git. Instead of sending patches, please fork this project using the standard git and github infrastructure.

AUTHOR

Top

Marcel Gruenauer <marcel@cpan.org>

COPYRIGHT AND LICENSE

Top


App-Benchmark-Accessors documentation Contained in the App-Benchmark-Accessors distribution.

use 5.006;
use strict;
use warnings;

package App::Benchmark::Accessors;
BEGIN {
  $App::Benchmark::Accessors::VERSION = '1.110100';
}
# ABSTRACT: Benchmark accessor generators

#<<<
package    # hide from PAUSE
  WithMoose;
use Moose;
has myattr => ( is => 'rw' );

package    # hide from PAUSE
  WithMooseImmutable;
use Moose;
has myattr => ( is => 'rw' );
__PACKAGE__->meta->make_immutable;

package    # hide from PAUSE
  WithMouse;
use Mouse;
has myattr => ( is => 'rw' );

package    # hide from PAUSE
  WithMouseImmutable;
use Mouse;
has myattr => ( is => 'rw' );
__PACKAGE__->meta->make_immutable;

package    # hide from PAUSE
  WithClassAccessor;
use parent qw(Class::Accessor);
__PACKAGE__->mk_accessors(qw/myattr/);

package    # hide from PAUSE
  WithClassAccessorFast;
use parent qw(Class::Accessor::Fast);
__PACKAGE__->mk_accessors(qw/myattr/);

package    # hide from PAUSE
  WithClassAccessorFastXS;
use parent qw(Class::Accessor::Fast::XS);
__PACKAGE__->mk_accessors(qw/myattr/);

package    # hide from PAUSE
  WithClassXSAccessorCompat;
use parent qw(Class::XSAccessor::Compat);
__PACKAGE__->mk_accessors(qw/myattr/);

package    # hide from PAUSE
  WithClassAccessorComplex;
use parent qw(Class::Accessor::Complex);
__PACKAGE__->mk_new->mk_scalar_accessors(qw/myattr/);

package    # hide from PAUSE
  WithClassAccessorConstructor;
use parent qw(Class::Accessor::Constructor Class::Accessor::Complex);
__PACKAGE__->mk_constructor->mk_scalar_accessors(qw/myattr/);

package    # hide from PAUSE
  WithClassAccessorClassy;
use Class::Accessor::Classy;
with 'new';
rw 'myattr';
no  Class::Accessor::Classy;

package    # hide from PAUSE
  WithClassAccessorLite;
use Class::Accessor::Lite new => 1, rw => [qw(myattr)];

package    # hide from PAUSE
  WithMojo;
use parent qw(Mojo::Base);
__PACKAGE__->attr('myattr');

package    # hide from PAUSE
  WithClassMethodMaker;
use Class::MethodMaker
    [ scalar => [ qw/myattr/ ],
      new    => [ qw/-hash new/ ],
    ];

package    # hide from PAUSE
  WithObjectTiny;
use Object::Tiny qw/myattr/;

package    # hide from PAUSE
  WithSpiffy;
use Spiffy -base;
field 'myattr';

package    # hide from PAUSE
  WithClassSpiffy;
use Class::Spiffy -base;
field 'myattr';

package    # hide from PAUSE
  WithAccessors;
use accessors qw(myattr);
sub new { bless {}, shift }

package    # hide from PAUSE
  WithClassXSAccessor;
use Class::XSAccessor accessors => { myattr => 'myattr' };
sub new {
    my $class = shift;
    bless { @_ } => $class;
}

package    # hide from PAUSE
  WithClassXSAccessorArray;
use Class::XSAccessor::Array accessors => { myattr => 0 };
sub new {
    my $class = shift;
    my %args = @_;
    bless [ $args{myattr} ] => $class;
}

package    # hide from PAUSE
  WithObjectTinyXS;
use Object::Tiny qw/myattr/;
use Class::XSAccessor accessors => { myattr => 'myattr' }, replace => 1;

package    # hide from PAUSE
  WithRose;
use parent qw(Rose::Object);
use Rose::Object::MakeMethods::Generic(scalar => 'myattr');

#package    # hide from PAUSE
#  WithBadgerClass;
#use Badger::Class
#    base     => 'Badger::Base',
#    mutators => 'myattr';

package    # hide from PAUSE
  WithRubyishAttribute;
use Rubyish::Attribute;
sub new { bless {}, shift }

attr_accessor "myattr";
#>>>
1;


__END__