2011/04/05

Any::Moose, Mouse, Moose

Perl 5에는 Moose라는 Python, Ruby도 울고갈 OOP프레임웍이 있다.

Moose는 많은 기능이 있는 반면 상대적으로 메모리를 많이 소비하고 속도가 약간 떨어지는 경향이 있다. 그래서 Moose의 모든 기능이 필요없을 경우 Mouse라는 Moose의 subset을 사용한다. 하지만 미래에 Moose의 기능을 확장 적용해야 할 경우를 고려하여 Any::Moose라는 모듈을 사용하면 사용자가 신경쓸 필요없이 알아서 최대한 빠른 것으로 적용해주므로 편리하다.

Moose와 Mouse(Any::Moose가 자동으로 최적화 했을때) 의 속도를 비교해 보았다.

Object Creation
322580.65/s  Any::Moose = Mouse
322580.65/s  Any::Moose Immutable = Mouse Immutable
 11655.01/s  Moose
212765.96/s  Moose Immutable

Accessor
6250000.00/s Any::Moose = Mouse
6250000.00/s Any::Moose Immutable = Mouse Immutable
2127659.57/s Moose
2127659.57/s Moose immutable

결론

__PACKAGE__->meta->make_immutable;
은 접근자의 속도에는 영향을 미치지 않으며
Moose의 객체생성속도에만 영향을 미친다.
Any::Moose를 쓰더라도 미래에 Moose 확장을 고려하여
기본 클래스 정의는


http://search.cpan.org/perldoc?Moose::Manual::BestPractices

package Person;

use Moose;  # 또는 use Any::Moose;
use namespace::autoclean;

# extends, roles, attributes, etc.

# methods

__PACKAGE__->meta->make_immutable;

1;

을 따르도록 하자.