是MooseX :: Declare和MooseX :: Method ::签名生产准备好了吗?

Chr*_*oms 12 perl moose

目前的版本(0.98)中的驼鹿::手册:: MooseX是线路:

我们对未来寄予厚望 MooseX::Method::SignaturesMooseX::Declare.然而,这些模块虽然经常被社区中一些更疯狂的成员用于生产,但仍然标记为alpha,以防万一需要进行向后不兼容的更改.

我注意到2009年9月MooseX::Method::Signatures更改日志中提到删除了" 可怕的ALPHA免责声明 ".
那么,这些仍然是"阿尔法"吗?
我还会被认为是使用它们的"更疯狂"之一吗?

rjh*_*rjh 12

我说它们已经准备好了 - 我正在生产中使用它们 - 但有几件事需要考虑:

性能

MooseX::Declare和依赖关系在编译时几乎完成了所有的魔术.根据程序的大小,您可能会发现从半秒到几秒的额外初始化开销.如果这是一个问题,请不要使用MooseX :: Declare.

在运行时,主要的开销是类型和参数检查,你应该(理想情况下)正在进行.也就是说,Moose类型约束有一些开销,即强制和更复杂(MooseX :: Types :: Structured-style)约束.如果性能问题,请不要使用这些.

稳定性

MooseX :: DeclareMooseX :: Method :: Signature的外部语法现在很稳定.但重要的是要知道内部结构会发生极端变化.(幸运的是,变化更好)

为了给你一个想法,签名本身是使用从Perl tokenizer(toke.c)窃取的大块C代码来获取的.在某些情况下,这可能会破坏,因为它实际上并没有解析任何东西.括号内的位使用PPI进行解析,PPI是为纯Perl设计的,但是生成的PPI树会被黑客攻击以获得有用的东西.Devel ::声明自己是一个黑客 - 在看到特定关键字(例如'role','class','method')后,Devel :: Declare-using模块必须手动重写源代码,不与真实交互Perl解析器.

拐角情况可能导致Perl发生段错误.或者严重重写源代码,因此您会遇到语法错误,但不知道是什么导致它们没有-MO::Deparse.如果您意外地弄乱了MooseX :: Declare语法,则无法保证模块会检测到这种情况并给您一个合理的错误.ALPHA的消息可能已经消失,但这仍然在内部做着黑暗和可怕的事情,你应该为此做好准备.

UPDATE

MooseX :: Declare尚未更新,您可能希望查看Moops等替代品.就个人而言,我决定坚持使用纯Moose,直到Perl本身开始支持class/method /具有本地语法,这可能就在卡片上.

  • 请注意,虽然`确实强制'有速度惩罚,但它也是最令人敬畏的*事物之一.适当使用它,只是不要用于*没有*理由:) (3认同)
  • 我不确定你能保证外部语法是稳定的,因为Moose本身没有这种稳定性的承诺. (2认同)
  • 对于代码编写的东西,我和一些Moose人谈过在预处理器类型的工作流程中使用Moose.分发流程Moosified.pm.PL,解析所有Moose的东西,吐出非Moose Perl代码,并安装它.然后,您可以查看输出以查看出现问题,而无需等到运行程序.如果你不需要动态的,运行时的东西,我认为这是Moose的最佳方式. (2认同)

hob*_*bbs 7

我认为这是一个不同观点的问题 - rafl是上述"社区中更疯狂的成员"之一,而Rolsky更保守.由你决定你同意谁,我认为最重要的变量是你自己的代码.

MooseX :: Declare是很好的代码.它不会随机炸毁你的机器,它的性能并不糟糕,它提供了很多漂亮的东西,同时减少了你必须编写的样板量.但它可能会在未来发生变化,使您的代码在更新之前拒绝编译; 当它看到无法解析的语法时,它可能会让你的编辑器和其他开发工具感到困惑,它可能会让你的协作者学习一个新的模块来处理你的代码,或者它可能会让你的老板感到厌烦所以任何未来的维护者都必须学习一个新的模块来处理你的代码.哪些事情适用于您,以及在何种程度上?我希望你比我更清楚.

  • +1,但让我注意到"社区中更疯狂的成员"实际上正在传达一些我认为你想说的东西.Florian写出了很好且通常稳定的代码.只是他也经历了很多实验.很棒的事情来了.与所有外部依赖关系一样,重要的是花一些时间来决定什么时候它是原型质量库,或者当它被认为是尝试和真实的时候. (2认同)

per*_*rin 5

有些人谁觉得成熟和稳定MooseX::Delcare,Devel::Declare在它是基于,甚至Moose本身还没有准备好为"黄金时间".我也知道两个拥有数百万访客的大公司,他们MooseX::Declare在生产环境中.我个人对我提供的堆栈感到满意,Moose并且看不到需要引入MooseX::Declare.我知道有些人认为我非常尊重谁拒绝编写新代码而没有声明性的糖MooseX::Declare.

所有这一切都可以说,关于某件事是否生产准备的决定在很大程度上取决于您的生产环境,您的发展需求和风险品味.如果没有您的帮助,我们无法就任何给定工具与该配置文件的匹配程度做出明智的决定.


Sch*_*ern 5

MooseX::Method::Signatures (MXMS) 和使用它的 MooseX::Declare 尚未做好生产准备。这不是因为代码不稳定,而是因为它太慢了。简单地使用method关键字,不使用类型或参数,运行时性能比常规方法调用高 500-1000 倍。我的 Macbook Pro 每秒可以使用 MXMS 执行大约 6,000 个简单的方法调用,而使用普通 Perl 则为 5,000,000。

相比之下,Method::Signatures 的性能几乎没有超过执行请求检查的通常成本。语法几乎与 MXMS 完全相同,并且支持 Moose(和鼠标)类型。两者都依赖于相同的底层语法修改技术。(完全公开,我是 Method::Signatures 的作者。)

如果您喜欢 MooseX::Declare 但想要 Method::Signatures 的性能,请尝试Method::Signatures::Modifiers