рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкрд░реНрд▓ рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдкреЛрд░реНрдЯ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░реНрд▓ рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рдореГрджреНрдз рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдордп рдХреЗ рд╕рд╛рде рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдкреИрдХреЗрдЬ) рдкреНрд░рдХрдЯ рд╣реБрдП рд╣реИрдВ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рдЧреНрд░реА, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпреЗ рдкреИрдХреЗрдЬ OOP рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреЗ рдореИрдиреБрдЕрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╛рдиреА рдПрдХ рддрд░рдл, рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдкрд░, рд╡реЗ рдХреЛрдб рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдореИрдВ рд╣рдореЗрд╢рд╛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреЛрдб рдХрд┐рддрдирд╛ рдзреАрдорд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕реЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЬреЛ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рд░рд┐рд╕рд░реНрдЪ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
OOP рдкреИрдХреЗрдЬ рдЕрд╡рд▓реЛрдХрди
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд░реНрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз OOP рдкреИрдХреЗрдЬреЛрдВ рдкрд░ рдПрдХ рдЫреЛрдЯреА рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗред
рд╕рд┐рд░реНрдл рдкрд░реНрд▓
рдХрд┐рд╕реА рднреА рдкреИрдХреЗрдЬ рдХреЗ рдмрд┐рдирд╛, рдкрд░реНрд▓ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдЗрд╕ рддрд░рд╣ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
package Dog; sub new { my ($class, %self) = @_; bless \%self, $class; return \%self; } sub make_noise { my $self = shift; say $self->{name}, " says: ruff-ruff!"; } 1;
рддрдм рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
use Dog; my $dog = Dog->new(name => "Snoopy"); $dog->make_noise();
рдореВрд╕
рдореВрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдореВрд▓ рдкрд░реНрд▓ 6 рд╕реЗ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдкрд░рд┐рдорд╛рдг рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИред рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг, рдореВрд╕ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛, рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд▓рдЧреЗрдЧрд╛:
package Dog; use Moose; has name => (is => 'ro', isa => 'Str'); sub make_noise { my $self = shift; say $self->name(), " says: ruff-ruff!"; } __PACKAGE__->meta->make_immutable;
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм
рдирдИ рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ рдЕрдм рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЪрд┐рдХрдирд╛ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдХрдХреНрд╖рд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдореЗрдВ
$ рд╕реНрд╡рдпрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдирдкреИрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд┐рдзрд┐рдпрд╛рдБ рд╕рд┐рд░реНрдл рдкреЗрд░реНрд▓реЛрд╡реНрд╕реНрдХрд┐рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╣реА рд░рд╣реАрдВред рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЛрдВ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдВред
рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░
рдФрд░ рдлрд┐рд░ рдпрд╣ рдЕрджреНрднреБрдд рдкреИрдХреЗрдЬ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ:
рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ ред рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ - рдХрдИ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдп рд╣реИрдВред
рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░рд╛ рдХреЛрдб рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
package Dog; use Moose; use Method::Signatures; has name => (is => 'ro', isa => 'Str'); method make_noise() { say $self->name(), " says: ruff-ruff!"; } __PACKAGE__->meta->make_immutable;
рдореВрд╕рдПрдХреНрд╕ :: рдШреЛрд╖рдгрд╛
рдкрд░реНрд▓ рдХреЗ рдЕрдиреБрдпрд╛рдпрд┐рдпреЛрдВ рдХреЗ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рджрд┐рдорд╛рдЧ рд╡рд╣рд╛рдБ рдирд╣реАрдВ рд░реБрдХреЗ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЖрдЧреЗ рдЬрд╛рдХрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ
MooseX :: Declare рд▓рд┐рдЦрд╛ред рд╕рдЪ рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд рдкреИрдХреЗрдЬ, рдпрджрд┐ рдПрдХ рдХрдордмреИрдХ (рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВ) рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдЕрдм рд╣рдо рдЕрдкрдиреЗ
рдбреЙрдЧ рдХреНрд▓рд╛рд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдкреВрд░реНрдг рдирд┐рд░реНрд╡рд╛рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
use MooseX::Declare; class Dog { has name => (is => 'ro', isa => 'Str'); method make_noise() { say $self->name(), " says: ruff-ruff!"; } }
OOP рдкреИрдХреЗрдЬ рдкреНрд░рджрд░реНрд╢рди
рдкрд░реНрд▓ рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдирдиреНрджрд┐рдд рди рд╣реЛрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХрддрд╛ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреА рд╣рд╛рдирд┐ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ:
- рдПрдХ рд╡рд░реНрдЧ рд╡рд╕реНрддреБ рдмрдирд╛рдирд╛ред
- рд╡рд┐рдзрд┐ рдХреЙрд▓ред
- рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪред
рдФрд░ рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ, рд╕рдВрдХреЗрддрди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
- рд╡реЗрдирд┐рд▓рд╛ - рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдХреЗрдЬ рдХреЗ рдмрд┐рдирд╛ рд╢реБрджреНрдз рдкрд░реНрд▓,
- Moose - Moose рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде,
- Moose_sig - рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде Moose рдФрд░ рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░,
- MooseX - MooseX рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рдеред
рд╡рд╕реНрддреБ рдирд┐рд░реНрдорд╛рдг
рджрд░ moose_sig рдореВрд╕ moosex рд╡реЗрдирд┐рд▓рд╛
moose_sig 104102 / s - -0% -0% -74%
рдореВрд╕ 104383 / s 0% - -0% -74%
рдореЛрд╕реЗрдХреНрд╕ 104592 / s 0% 0% - -74%
рд╡реЗрдирд┐рд▓рд╛ 401924 / s 286% 285% 284% -
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╢реБрджреНрдз рдУрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рднреА рдУрдУрдкреА рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд▓рдЧрднрдЧ 4 рдЧреБрдирд╛ рдзреАрдорд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ: Moose рдФрд░ MooseX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдСрдкрд░реЗрд╢рди :: Declare рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ MooseX :: Declare рдХреЛ рд╡рд░реАрдпрддрд╛ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╡рд┐рдзрд┐ рдХреЙрд▓
рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╣реБрдП, рдЕрдЧрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЪрд┐рддреНрд░ рдЗрддрдирд╛ рдЕрджреНрднреБрдд рдирд╣реАрдВ рд╣реИ:
рджрд░ рдореЛрд╕реЗрдХреНрд╕ рдореВрд╕ рдореЛрд╕реЗ_рд╕рд┐рдЧ рд╡реЗрдирд┐рд▓рд╛
Moosex 8596 / s - -94% -94% -95%
рдореМрд╕ 148055 / рдПрд╕ 1622% - -0% -17%
moose_sig 148516 / s 1628% 0% - -17%
рд╡реЗрдирд┐рд▓рд╛ 178254 / s 1974% 20% 20% -
MooseX 16 рдмрд╛рд░ (рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдпрд╛ рдмрд┐рдирд╛) рдореВрд╕ рдЦреЗрд▓рддрд╛ рд╣реИ! рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдп рд╣реИред рдпрджрд┐ рдЖрдк рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЪрд╛рд░реЛрдВ рдУрд░ рд╣рдВрдЧрд╛рдорд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЗрддрдиреЗ рдмрдбрд╝реЗ рдЕрдВрддрд░ рдХрд╛ рдХрд╛рд░рдг MooseX :: рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреИрдХреЗрдЬ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рддрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддрдм рддрдХ MooseX, рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдореВрд╕ + рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╢реБрджреНрдз рдкрд░реНрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЗрд╡рд▓ 20% рдзреАрдорд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдХрд┐рд╕реА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд┐рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЗрди рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдЪрд▓реЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рд╡рд╕реНрддреБ рдХреА рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪ:
рджрд░ рдореЛрд╕реЗрдХреНрд╕ moose_sig moose рд╡реЗрдирд┐рд▓рд╛
рдореВрд╕реЗрдХреНрд╕ 1503608 / s - -1% -1% -17%
moose_sig 1517928 / s 1% - -0% -16%
рдореМрд╕ 1517928 / s 1% 0% - -16%
рд╡реЗрдирд┐рд▓рд╛ 1815063/21% 20% 20% -
рдлрд┐рд░ рд╕реЗ, рд╢реБрджреНрдз рдкрд░реНрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдиреБрдХрд╕рд╛рди рдХреЗрд╡рд▓ 20% рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ MooseX рдмрд╛рдХреА рдкреИрдХреЗрдЬреЛрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЦрд░рд╛рдм рдирд╣реАрдВ рдерд╛ред рдпрджрд┐ MooseX рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ :: рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ ...
MooseX рдХреЛ рдареАрдХ рдХрд░реЗрдВ
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ MooseX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдХрд╛рдВрдЯреЗрджрд╛рд░ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рд╕рд╣реА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рддрд╛рдХрд┐ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╣реЛред
рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ, рд╡рд╣ рд╣реИ рд╡рд┐рдзрд┐ :: рдореЛрд╕реЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрд╛рдХреНрд╖рд░ :: рдбрд┐рдХреНрд▓реЗрдпрд░ред рд╣рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░
рдбреЙрдЧ рдХреЛрдб рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
use MooseX::Declare; class Dog { use Method::Signatures; has name => (is => 'ro', isa => 'Str'); method make_noise() { say $self->name(), " says: ruff-ruff!"; } }
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрджрд╕реВрд░рдд рдЪреЗрддрд╛рд╡рдиреА рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ:
рд╕рдмрд░реВрдЯреАрди рдбреЙрдЧ :: рдореЗрдердб рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕реЗ /opt/local/lib/perl5/site_perl/5.14.1/darwin-thread-multi-2level/Devel/Declare/MethodInstaller/Simple.pm рд▓рд╛рдЗрди 17 рдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмреЗрдореЗрд▓: рдЙрдк рдбреЙрдЧ :: рд╡рд┐рдзрд┐: рдХреЛрдИ рдирд╣реАрдВ (&) / atopt /local/lib/perl5/site_perl/5.14.1/darwin-thread-multi-2level/Dvel/Declare/MethodInstaller/Simple.pm рд▓рд╛рдЗрди 17 рдкрд░ред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐
рд╡рд┐рдзрд┐ рдПрдХ рд╕рд░рд▓ рдкрд░реНрд▓ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ MooseX :: рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдФрд░ рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреЛрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдЖрддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдХреИрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдПред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдПрдХ рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдкрдбрд╝рд╛ред
рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ :: рд╕рд░рд▓
рдХреНрдпрд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!
рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ :: рд╕рд░рд▓ рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдЗрд╕рдореЗрдВ, рдЖрдк
рд╡рд┐рдзрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдирд╛рдо рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ MooseX :: рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП,
рдбреЙрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
use MooseX::Declare; class Dog { use Method::Signatures::Simple name => 'def'; has name => (is => 'ro', isa => 'Str'); def make_noise() { say $self->name(), " says: ruff-ruff!"; } }
рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐
рд╡рд┐рдзрд┐ рдХреЗ рдмрдЬрд╛рдп рдЕрдм рд╣рдо
рдбрд┐рдл (рдЬреИрд╕реЗ рдкрд╛рдпрдерди) рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдХреЛрдб (moosex_sig) рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ рдпрд╛ рдирд╣реАрдВ:
рд░реЗрдЯ рдореЛрд╕реЗрдХреНрд╕ moosex_sig moose_sig moose рд╡реЗрдирд┐рд▓рд╛
Moosex 8651 / s - -94% -94% -94% -95%
moosex_sig 146152 / s 1589% - -1% -3% -18%
moose_sig 148025 / s 1611% 1% - -2% -17%
рдореМрд╕ 150866 / s 1644% 3% 2% - -16%
рд╡реЗрдирд┐рд▓рд╛ 179200 / рдПрд╕ 1971% 23% 21% 19% -
рд╣рдорд╛рд░реА рдЕрдкреЗрдХреНрд╖рд╛рдПрдВ рдкреВрд░реА рд╣реБрдИрдВред MooseX :: рдШреЛрд╖рдгрд╛ + рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ :: рд╕рд░рд▓ Moose + рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рджреЗрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдкрд╕рдВрдж рдХреЗ рд╕рднреА рдзрди рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЖрдЬ рддрдХ, рдкрд░реНрд▓ рдореЗрдВ OOP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╕рд┐рдлрд╛рд░рд┐рд╢ MooseX рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИ :: рдШреЛрд╖рдгрд╛ рдФрд░ рд╡рд┐рдзрд┐ :: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ :: рд╕рд░рд▓ рдкреИрдХреЗрдЬред рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рд╛рдХреГрддрд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рдмрдбрд╝реА рдирд╣реАрдВ рд╣реИ, рдПрдХ рднреА рдХрд╣ рд╕рдХрддрд╛ рд╣реИ, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рдореВрд▓реНрдпред
рдкрд░рд┐рд╢рд┐рд╖реНрдЯ: рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб github рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ:
github.com/alexeiz/oopbench