use make_immutable to accelerate your Class Moose

Introduction:

Mouse 是 Moose 的简化版,没有提供扩展,只有 Moose 的 OO 核心功能,效率据说比 Moose 快了三四倍.如果你只用到 Moose 的 OO 核心功能,那么可以用Any::Moose 在两种实现间自动切换,另外 Any::Moose 还提供自动加载 MooseX::*扩展的功能,但由于没有现成的 MouseX::* 对应物,所以要么直接用 Moose,要么自己写一个 MouseX 扩展了. 

Moose 是 Perl 5 中一个完整的对象系统,就象任何现代的面向对象的语言一样( Perl5 绝对不是),它提供一些属性声明,对象构造,继承,和其它更多的关键字.这些关键字是语言的一部分,所以你不关心它们是如何实现.

Moose 的目的是在 Perl 5 中实现,让 Perl 5 的面向对象做到同样的事情.实际上,这些关键字并不是我们创造的.它只是我们提示的 "糖",看起来和本身的关键字一样.在 Moose 中,你只要确认你的类的声明,不需要了解 blessed 这个 HASH 的引用,在存取的方法.你只需要专注于你类的逻辑结构,重点是"做什么",而不是"如何做".

Moose 很大程度是基于在 Perl 6 的面向对象系统,以及从 CLOS,Smalltalk 和许多其他语言中借鉴最好的想法.

Moose 是由Pugs 的开发人员Stevan Little 写的.


概要

1
2
3
4
5
6
7
package Point;
use Moose;
 
has 'x' => ( isa => 'Int' , is => 'ro' );
has 'y' => ( isa => 'Int' , is => 'rw' );
 
__PACKAGE__->meta->make_immutable;

 

描述

这 Moose 的元类( metaclass) API 提供了 make_immutable() 的方法,调用这个方法会对你的类做二样事.

  • 首先,这使得它更快.特别是对象的构造和 destruction (析构?)是有效的“内联”你的类,并不再调用元API.
  • 其次,你可以不再需要通过元类的 API 来做改变,如添加属性.在实践中,这不会是一个问题,因为你很少需要在第一次加载类之后做这些.

结论

我们强烈建议您让您的类,象这样成为不可改变的.它使你的代码要比原来快得多,只使用小小的编译时间来当做成本.这将在创建很多对象时显得尤其明显.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值