Perl 的 Object::Pad 的隐私和速度
Posted 近探数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl 的 Object::Pad 的隐私和速度相关的知识,希望对你有一定的参考价值。
Perl 的 Object::Pad 的隐私和速度
上周我发现我在探索Object::Pad作为Perl的Moo面向对象框架的替代方案,因为前者正在为一个名为Corinna的提议的内置 OO 框架的语法和概念进行原型设计。我不得不搁置那个特定的项目,因为dbcritic的当前设计有点过于角色化,并且 Object::Pad 目前缺少Moo 中的方法修饰符。(Corinna明确地跳过了它们当前的最小可行产品。)值得庆幸的是,开发继续快速进行。例如,作者保罗·埃文斯也已经解决 我在尝试检查调试器中的槽值时遇到的一个问题。
但我想强调我在上周的一条评论中提出的一点:Object::Pad 的槽(又名字段、属性等)在默认情况下是私有的,完全不暴露给其他类实例,除非它们使用元对象协议. 除非您明确定义或生成某种访问器方法,否则这些槽就像词法(又名my)变量一样,仅可用于类中的方法。
下面是一个例子:
这与 Perl 的技术含量较低的基于 hashref 的对象形成鲜明对比,其中所有属性都可以通过取消引用实例来获得,例如,$object->{foo}。尽管不鼓励,OO 纯粹主义者有时会为这种非强制封装而使用Perl,而且我自己也看到过违反它的代码库,尽管前面的私有方法和属性名称的约定带有下划线 ( _)。
不幸的是,目前还没有任何方法可以将 Object::Pad 方法声明为 private。您可以使用词法子例程,但是这样您就失去了预制$self变量的便利性和通过 MOP 的可访问性。Corinna 提议列出了几种不同类型的方法,包括私有方法,所以这可能是未来 Object::Pad 开发的一个领域。
评论中的另一个悬而未决的问题:“与 Moo 和blessed 对象相比,[Object::Pad] 在内存和速度方面如何?” 幸运的是,多产的perlancar已经将 Object::Pad 添加到他的Bencher::Scenarios::Accessors发行版中,从那看来,在它和 Moo 之间,Object::Pad 在启动时更快,在对象上并驾齐驱构造和访问器生成,读取和写入速度较慢。(请注意,Object::Pad 是一个快速移动的目标,因此这些数字可能无法跟踪最新版本的更改。)bless除了读取之外,普通ed 对象在大多数情况下的表现都比两者都好也就不足为奇了,其中 Moo 比基于哈希的对象快,但比基于数组的慢。
如果将 Corinna 内置到 Perl 中,会缩小与blessed 对象之间的差距,但在我看来,使用对象系统的优势在95% 的情况下超过了性能。
24h在线 :17751719173
0512-36606771
以上是关于Perl 的 Object::Pad 的隐私和速度的主要内容,如果未能解决你的问题,请参考以下文章
如何修改Smith和Waterman perl脚本以加快速度?
我可以告诉 Perl 一些数据是不可变的以加快速度吗?
perl dbi mysql 向表中插入数据速度很慢
阿里安全开源隐私计算新技术:计算速度快20倍,通信成本低2倍,已登安全顶会...
大数据时代下人们的隐私越来越安全四辩稿
如何利用perl快速筛选差异基因?