我想说它们已经准备好生产了——我在生产中使用它们——但有几件事需要考虑:
表现
MooseX::Declare
和依赖项几乎在编译时完成了所有的魔法。根据程序的大小,您可能会发现半秒到几秒的额外初始化开销。如果这是一个问题,请不要使用MooseX::Declare。
在运行时,主要开销是类型和参数检查,无论如何您都应该(理想情况下)进行检查。也就是说,Moose 类型约束有一些开销,即强制和更复杂的 (MooseX::Types::Structured-style) 约束。如果性能是一个问题,请不要使用这些。
稳定
MooseX::Declare和MooseX::Method::Signature 的外部语法现在是稳定的。但重要的是要知道内部结构会发生极端变化。(幸运的是,变化变得更好)
给你一个想法,签名本身是使用从 Perl 标记器 (toke.c) 窃取的一大块 C 代码获取的。这在某些情况下可能会中断,因为它实际上并没有解析任何内容。括号内的位是使用PPI解析的,它是为纯 Perl 设计的,但是生成的 PPI 树然后被破解以获得有用的东西。Devel::Declare本身就是一个 hack - 在它看到特定的关键字(例如,'role'、'class'、'method')之后,使用 Devel::Declare 的模块必须手动重写源代码,而不与真实的交互Perl 解析器。
极端情况可能会导致 Perl 出现段错误。或者重写源代码很糟糕,所以你会得到语法错误,但不知道是什么导致它们没有-MO::Deparse
. 如果您不小心弄乱了MooseX::Declare语法,则无法保证模块会检测到这一点并给您一个合理的错误。ALPHA 消息可能已经消失,但这仍然在内部做着黑暗和可怕的事情,你应该为此做好准备。
更新
MooseX::Declare 没有太多更新,您可能希望查看诸如Moops 之类的替代方案。就我个人而言,我决定坚持使用纯 Moose,直到 Perl 本身开始支持原生的类/方法/has 语法,这可能在卡片上。