Moose > Moose::Cookbook::Basics::Recipe7

題名

Moose::Cookbook::Basics::Recipe7 - 不変化によるMooseの高速化

概要

  package Point;
  use Moose;

  has 'x' => ( isa => 'Int', is => 'ro' );
  has 'y' => ( isa => 'Int', is => 'rw' );

  __PACKAGE__->meta->make_immutable;

本文

MooseのメタクラスAPIにmake_immutable()というメソッドがあります。このメソッドを呼ぶと2つのことが起こります。まず、クラスの動作が高速化します。特に、オブジェクトの生成・破棄はクラスの中で効率よく「インライン展開」され、メタAPIを呼ばなくてもすむようになります。

また、メタクラスAPIを利用してクラスに変更を加えることはできなくなります(アトリビュートの追加など)。ただし、最初にクラスをロードしたあとでクラスに変更を加える必要が出てくることはめったにありませんので、実用上問題になることはありません。

まとめ

クラスは不変化しておくことを強くおすすめします。そうすると、コンパイル時に多少コストがかかりますが、コードがかなり速くなるためです。この差は、多くのオブジェクトを生成すると特に顕著になります。

作者

Dave Rolsky <autarch@urth.org>

コピーライト & ライセンス

Copyright 2006-2009 by Infinity Interactive, Inc.

http://www.iinteractive.com

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.