MooseX-XSConstructor

 view release on metacpan or  search on metacpan

examples/bench.pl  view on Meta::CPAN

use v5.12;
use strict;
use warnings;
use Benchmark 'cmpthese';

BEGIN {
	package Local::Standard;
	use Moose;
	
	has n        => ( is => 'ro', isa => 'Int',      required => 1 );
	has children => ( is => 'ro', isa => 'ArrayRef', lazy => 1, builder => '_build_children' );
	has sum      => ( is => 'ro', isa => 'Int',      lazy => 1, builder => '_build_sum' );
	
	sub _build_children {
		my $self = shift;
		return [] if $self->n < 1;
		
		my @kids = map {
			my $n = $_;
			__PACKAGE__->new( n => $n );
		} 0 .. $self->n - 1;

examples/bench.pl  view on Meta::CPAN

};

BEGIN {
	package Local::XS;
	use Moose;
	use MooseX::XSAccessor;
	use MooseX::XSConstructor;
	use Types::Common -types;
		
	has n        => ( is => 'ro', isa => Int,      required => 1 );
	has children => ( is => 'ro', isa => ArrayRef, lazy => 1, builder => '_build_children' );
	has sum      => ( is => 'ro', isa => Int,      lazy => 1, builder => '_build_sum' );
	
	sub _build_children {
		my $self = shift;
		return [] if $self->n < 1;
		
		my @kids = map {
			my $n = $_;
			__PACKAGE__->new( n => $n );
		} 0 .. $self->n - 1;



( run in 2.426 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )