Perl 驼鹿vs.穆塞克斯::声明
POSTLUDE MooseX::Declare不再被任何人推荐,因为它依赖于Devel::Declare,Declare起到了它的作用,但它本身已经过时了。此时,如果有人想要MX::D,他们应该查看 原创 假设我已经对旧式Perl OO有了相当的了解,并且假设我要用某种风格的Moose编写一些新代码(是的,我知道这会影响性能),我想知道,在兔子洞的深处,我是否会希望我选择了另一条路?你能告诉我vs(或其他)的相对优点吗。还有,如果我选择切换,它们的可互换性如何,一个用于一个类,另一个用于另一个类Perl 驼鹿vs.穆塞克斯::声明,perl,oop,moose,Perl,Oop,Moose,POSTLUDE MooseX::Declare不再被任何人推荐,因为它依赖于Devel::Declare,Declare起到了它的作用,但它本身已经过时了。此时,如果有人想要MX::D,他们应该查看 原创 假设我已经对旧式Perl OO有了相当的了解,并且假设我要用某种风格的Moose编写一些新代码(是的,我知道这会影响性能),我想知道,在兔子洞的深处,我是否会希望我选择了另一条路?你能告诉我vs(或其他)的相对优点吗。还有,如果我选择切换,它们的可互换性如何,一个用于一个类,另一个用于另一个
(顺便说一句,我可以回答这个问题,但是我认为一个结构合理的答案可能可以避免主观性)MooseX::Declare基本上是Moose语法的糖衣层。对于经过解析器的所有内容,它们在生成的内容上都是相同的。Declare只是用更少的文字产生了更多的信息 作为一个喜欢MooseX::Declare语法但仍然喜欢用普通Moose编写所有代码的人,权衡主要是在开发和可维护性方面 比较时注意事项的基本列表:
- Declare有更简洁的语法。在普通的旧perl对象(POPO?)中需要几百行,在Moose中可能需要50行,在MooseX::Declare中可能需要30行。来自MooseX::Declare的代码对我来说更具可读性和优雅性
- Declare意味着你可以免费拥有MooseX::类型和MooseX::方法::签名。这导致了非常优雅的
语法,这使得人们在使用Ruby几年后又回到了Perl方法foo(Bar$Bar,Baz$Baz){…}
- Declare的一个缺点是,一些错误消息比Moose更加神秘。TypeConstraint验证失败的错误可能发生在MooseX::Types::Structured的几个层次上,从那里到您的代码被破坏的地方对于系统新手来说可能很困难。驼鹿也有这个问题,但程度较轻
- 龙在穆塞克斯的藏身之处可能与它们在驼鹿中的藏身之处略有不同。Declare致力于绕过已知的驼鹿问题(例如,
的时间安排),但引入了一些需要注意的新地方。例如,MooseX::类型与Moose的原生Stringy类型有完全不同的问题集[^1]with()
- Declare还有另一个性能上的冲击。这是MooseX::Declare开发人员和人们都知道的(我相信有几个工作价值观)
- Declare为Moose添加了更多依赖项。我加上这个是因为人们已经在抱怨Moose的依赖列表,它大约有20个模块。Declare在此基础上增加了大约5个直接依赖项。然而,总的名单是驼鹿27号,驼鹿性别::声明91号
[^1]:有人少说,有人多说。老实说,Moose核心开发人员仍然在争论这个问题,没有正确的答案。您可能会感兴趣的一个小方面,我也可能对这个问题的答案感兴趣:Moose::Declare的主要问题是我无法将我的应用程序打包为可执行文件,这在我的具体案例中很重要,既不使用PAR::Packer,也不使用ActiveState PerlApp 然后我又回到了驼鹿代码。如上所述 MooseX::Declare的其他问题: -可怕的错误消息(真的,毫无用处。除非您使用Method::Signatures::Modifiers) -性能受到了冲击(正如您所指出的),但在我看来,这并不小。(我们分析了一些大型现实应用程序) -TryCatch有问题(如果您使用它,请参阅:) -混合环境中的一些不兼容性(MooseX-非Moose环境,例如$VERSION检查失败) 如果你不需要MooseX的“语法糖”,就不要使用它。根据你要完成的任务,我会使用“从下到上”,例如。 1.鼠标+方法::签名 2.驼鹿 3.那也许是莫塞克斯 取决于你想要什么
按此顺序升级并不太复杂。然而,如果你真的需要Moose,我建议你寻找其他一些面向对象的开发语言,提供box中的大部分功能(如horribile dictu Ruby或Python),以及那些找不到的功能,你也许可以不使用它们。如果你真的想要Moose,考虑从底部到顶部的方法以较少的糖开始。我更喜欢先使用鼠标+方法::签名。我的情况是,我坐在后端,我们需要很少的对象、浅层次结构,但有时需要快速访问器——然后我们仍然可以回到XSAccessor。鼠标+方法签名似乎是语法帮助和速度之间的一个很好的折衷。如果我的设计真的需要更多,那么只需升级到Moose即可。
我可以用MooseX::Declare确认速度损失,不仅是简单的访问器基准测试(),而且是在实际应用中。这与神秘的错误消息相结合,规定了MooseX::Declare out。老实说,我很惊讶没有其他人回答。通常在我看到它的时候,其他一些人已经发表了评论。我也不在乎因果报应、瘦弱或什么