performance - 检查 Perl 函数参数值得吗?

标签 performance perl types moose typechecking

有很多关于 MooseX::Method::Signatures 的讨论,甚至在此之前,诸如 Params::Validate 之类的模块旨在对方法或函数的每个参数进行类型检查。我正在考虑将前者用于我 future 的所有 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!";
也许是因为没有某种辅助模块,工作量太大,但也许是因为在实践中我们不会向函数发送多余的参数,也不会向期望标量的方法发送 arrayrefs - 或者如果我们这样做,我们有 use warnings;我们很快就听说了 - 一种 duck typing 方法。
那么 Perl 类型检查是否值得性能打击,或者它的优势主要体现在 C 或 Java 等已编译的强类型语言中?
我对任何有编写使用这些模块的 Perl 经验并看到使用它们的好处(或没有)的人的答案感兴趣;如果您的公司/项目有任何与类型检查有关的政策;以及类型检查和性能方面的任何问题。
更新: 我最近读了一篇关于这个主题的有趣文章,名为 Strong Testing vs. Strong Typing 。忽略轻微的 Python 偏见,它本质上表明类型检查在某些情况下可能令人窒息,即使您的程序通过了类型检查,也不能保证正确性 - 正确的测试是确定的唯一方法。

最佳答案

是的,它值得——防御性编程是永远值得的事情之一。

关于performance - 检查 Perl 函数参数值得吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2330599/

相关文章:

c# - 为什么这个循环这么慢?

perl - 如何防止子程序在 Perl 中被覆盖?

ms-access - Access : Text , 备忘录或 VarChar ?使用哪一种?

c++ - 声明与类型不兼容

performance - O(n) + o(nlogn) 是多少?

string - Julia - 为什么使用宏 @info 会产生糟糕的 @code_warntype 性能?

database - Oracle - 索引似乎不起作用。还是慢

linux - Proc::Daemon with mod_perl 不写入 STDOUT 或 STDERR

perl - 无法为 RHEL 安装 DBI.pm 和 DBD.pm 来运行 perl 脚本

vba - Excel VBA - 解释 "N/A"值