Perl MooseX::Declare和MooseX::Method::Signatures产品准备好了吗?

Perl MooseX::Declare和MooseX::Method::Signatures产品准备好了吗?,perl,moose,Perl,Moose,从中可以看到以下行: 我们对中国的未来寄予厚望 和 . 然而,这些 模块,而在 由一些更疯狂的人制作 社区成员,仍然是 标记为alpha,以防万一 需要进行不兼容的更改 我注意到,对于2009年9月的报告,提到删除了“可怕的ALPHA免责声明”。 那么,这些仍然是“阿尔法”吗? 我还会被认为是“更疯狂”的人吗?这取决于你所说的“生产就绪”是什么意思。我不会依赖它们,直到它们的速度慢了一点。我希望我的产品不需要频繁地关注外部代码更改、API调整等。这对驼鹿来说不是什么特别的事情,而是任何一个年轻的

从中可以看到以下行:

我们对中国的未来寄予厚望 和 . 然而,这些 模块,而在 由一些更疯狂的人制作 社区成员,仍然是 标记为alpha,以防万一 需要进行不兼容的更改

我注意到,对于2009年9月的报告,提到删除了“可怕的ALPHA免责声明”。
那么,这些仍然是“阿尔法”吗?

我还会被认为是“更疯狂”的人吗?

这取决于你所说的“生产就绪”是什么意思。我不会依赖它们,直到它们的速度慢了一点。我希望我的产品不需要频繁地关注外部代码更改、API调整等。这对驼鹿来说不是什么特别的事情,而是任何一个年轻的项目


你必须判断这对你有多重要。在某些情况下,将产品投入生产是一个漫长的过程,因此您必须谨慎处理这些事情。在另一个极端,有些地方允许您直接在生产服务器上编辑文件。也就是说,在任何人告诉你某个特定的穆塞克斯模块在哪一边之前,你必须定义你的容忍度。

有些人认为,它所基于的
Moose::Delcare
Devel::Declare
,甚至
Moose
本身的成熟度和稳定性尚未为“黄金时间”做好准备。我还知道两家每月有数百万访客的大公司,他们的生产环境中有
MooseX::Declare
。我个人对提供给我的
Moose
堆栈感到满意,并且认为没有必要引入
MooseX::Declare
。我认识一些人,他们的观点是我非常尊重的,他们拒绝在没有
MooseX::Declare
的声明糖的情况下编写新代码


所有这一切都意味着,关于产品是否准备就绪的决定在很大程度上取决于您的生产环境、开发需求和风险偏好。如果不站在你的立场上,我们就不可能对任何给定的工具与该配置文件的匹配程度做出明智的决定。

我认为这是一个观点不同的问题,就像任何事情一样——rafl是上述“社区中更疯狂的成员”之一,而罗尔斯基则更保守。这取决于你决定你同意谁,实际上我认为最重要的变量是你自己的代码


Declare是很好的代码。它不会随机炸毁你的机器,性能也不差,它提供了很多漂亮的东西,同时减少了你必须编写的样板文件的数量。但将来可能会发生变化,使您的代码在更新之前拒绝编译;当编辑器和其他开发工具看到无法解析的语法时,它可能会让它们感到困惑;它可能会让您的合作者学习一个新模块来处理代码,从而激怒他们;它可能会让您的老板生气,因为它使任何未来的维护者都必须学习一个新模块来处理代码。以下哪一项适用于你,适用程度如何?我希望你比我更清楚。

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

演出 依赖项在编译时发挥了几乎所有的作用。根据程序的大小,您可能会发现额外的初始化开销从半秒到几秒不等。如果这是一个问题,不要使用

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

稳定性 外部语法现在是稳定的。但重要的是要知道,内部结构会发生极端变化。(幸运的是,情况有所好转)

为了让您了解一下,签名本身是使用从Perl标记器(toke.C)偷来的一大块C代码抓取的。这在某些情况下可能会中断,因为它实际上没有解析任何内容。括号内的位是使用解析的,这是为纯Perl设计的,但随后会对生成的PPI树进行黑客攻击以获得有用的东西。它本身就是一种黑客行为——在看到特定的关键字(例如“角色”、“类”、“方法”)后,Devel::Declare using模块必须手工重写源代码,而不与真正的Perl解析器交互

角落案例可能会导致Perl出错。或者将源代码重写得很糟糕,因此您会出现语法错误,但如果没有
-MO::Deparse
,您就不知道是什么导致了这些错误。如果您无意中弄乱了语法,则无法保证模块会检测到这一点并给出合理的错误。ALPHA信息可能已经消失,但它仍然在内部做着黑暗和可怕的事情,你应该为此做好准备

更新


Declare并没有太多更新,您可能希望看看其他替代方法,例如。就我个人而言,我决定坚持使用纯Moose,直到Perl本身开始支持类/方法/本机语法,也就是说,MooseX::method::Signatures(MXM)和使用它的MooseX::Declare还没有准备好生产。这不是因为代码不稳定,而是因为它的速度非常慢。简单地使用
方法
关键字,不使用类型或参数,是一个很好的选择。我的Macbook Pro使用MXMS每秒可以执行大约6000次简单方法调用,而使用普通Perl则可以执行5000000次

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