【发布时间】:2011-01-20 19:07:43
【问题描述】:
关于MooseX::Method::Signatures 的讨论很多,甚至在此之前,诸如Params::Validate 之类的模块旨在对方法或函数的每个参数进行类型检查。我正在考虑将前者用于我未来的所有 Perl 代码,包括个人和工作场所。但我不确定这是否值得。
我在想我之前看过(和写过)的所有 Perl 代码都没有执行这样的检查。我很少看到模块这样做:
my ($a, $b) = @_;
defined $a or croak '$a must be defined!';
!ref $a or croak '$a must be a scalar!";
...
@_ == 2 or croak "Too many arguments!";
也许是因为没有某种辅助模块的工作量太大,但也许是因为在实践中我们不会向函数发送过多的参数,也不会向期望标量的方法发送数组引用 - 或者如果我们这样做了,我们有use warnings;,我们很快就听说了——duck typing 方法。
那么 Perl 类型检查是否值得性能损失,或者它的优势主要体现在 C 或 Java 等已编译的强类型语言中?
我对任何有编写使用这些模块的 Perl 经验并看到使用这些模块的好处(或没有)的人的回答很感兴趣;如果您的公司/项目有任何与类型检查有关的政策;以及类型检查和性能方面的任何问题。
更新:我最近阅读了一篇关于该主题的有趣文章,名为 Strong Testing vs. Strong Typing。忽略轻微的 Python 偏见,它本质上表明类型检查在某些情况下可能会令人窒息,即使您的程序通过了类型检查,也不能保证正确性 - 正确的测试是确定的唯一方法。
【问题讨论】:
标签: performance perl types moose typechecking