Perl 驼鹿vs.穆塞克斯::声明

Perl 驼鹿vs.穆塞克斯::声明,perl,oop,moose,Perl,Oop,Moose,POSTLUDE MooseX::Declare不再被任何人推荐,因为它依赖于Devel::Declare,Declare起到了它的作用,但它本身已经过时了。此时,如果有人想要MX::D,他们应该查看 原创 假设我已经对旧式Perl OO有了相当的了解,并且假设我要用某种风格的Moose编写一些新代码(是的,我知道这会影响性能),我想知道,在兔子洞的深处,我是否会希望我选择了另一条路?你能告诉我vs(或其他)的相对优点吗。还有,如果我选择切换,它们的可互换性如何,一个用于一个类,另一个用于另一个

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::方法::签名。这导致了非常优雅的
    方法foo(Bar$Bar,Baz$Baz){…}
    语法,这使得人们在使用Ruby几年后又回到了Perl

  • Declare的一个缺点是,一些错误消息比Moose更加神秘。TypeConstraint验证失败的错误可能发生在MooseX::Types::Structured的几个层次上,从那里到您的代码被破坏的地方对于系统新手来说可能很困难。驼鹿也有这个问题,但程度较轻

  • 龙在穆塞克斯的藏身之处可能与它们在驼鹿中的藏身之处略有不同。Declare致力于绕过已知的驼鹿问题(例如,
    with()
    的时间安排),但引入了一些需要注意的新地方。例如,MooseX::类型与Moose的原生Stringy类型有完全不同的问题集[^1]

  • Declare还有另一个性能上的冲击。这是MooseX::Declare开发人员和人们都知道的(我相信有几个工作价值观)

  • Declare为Moose添加了更多依赖项。我加上这个是因为人们已经在抱怨Moose的依赖列表,它大约有20个模块。Declare在此基础上增加了大约5个直接依赖项。然而,总的名单是驼鹿27号,驼鹿性别::声明91号

如果您愿意使用MooseX::Declare,最好的部分是可以在每个类级别在它们之间进行交换。在一个项目中,你不需要选择一个。如果这个类在Moose中因为性能需要而更好,或者它由初级程序员维护,或者安装在更严格控制的系统上。你可以做到。如果该类可以从MooseX::Declare语法的额外清晰性中获益,那么您也可以这样做

希望这有助于回答这个问题


[^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。

老实说,我很惊讶没有其他人回答。通常在我看到它的时候,其他一些人已经发表了评论。我也不在乎因果报应、瘦弱或什么