=encoding utf8 =pod =head1 題名 Moose::Cookbook::Basics::Recipe7 - 不変化によるMooseの高速化 =head1 概要 package Point; use Moose; has 'x' => ( isa => 'Int', is => 'ro' ); has 'y' => ( isa => 'Int', is => 'rw' ); __PACKAGE__->meta->make_immutable; =head1 本文 MooseのメタクラスAPIにCというメソッドがあります。このメソッドを呼ぶと2つのことが起こります。まず、クラスの動作が高速化します。特に、オブジェクトの生成・破棄はクラスの中で効率よく「インライン展開」され、メタAPIを呼ばなくてもすむようになります。 また、メタクラスAPIを利用してクラスに変更を加えることはできなくなります(アトリビュートの追加など)。ただし、最初にクラスをロードしたあとでクラスに変更を加える必要が出てくることはめったにありませんので、実用上問題になることはありません。 =head1 まとめ クラスは不変化しておくことを強くおすすめします。そうすると、コンパイル時に多少コストがかかりますが、コードがかなり速くなるためです。この差は、多くのオブジェクトを生成すると特に顕著になります。 =head1 作者 Dave Rolsky Eautarch@urth.orgE =head1 COPYRIGHT AND LICENSE Copyright 2006-2009 by Infinity Interactive, Inc. L This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut