Там много шума о 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!";
Возможно, потому, что он просто слишком много работает без какого-либо вспомогательного модуля, но, возможно, потому, что на практике мы не отправляем лишние аргументы в функции, и мы не отправляем arrayrefs методам, которые ожидают скаляры - или если мы это сделаем, у нас есть use warnings;
, и мы быстро об этом узнаем - duck typing.
Итак, проверяется ли проверка типа Perl на производительность, или ее сильные стороны преимущественно отображаются на скомпилированных, сильно типизированных языках, таких как C или Java?
Мне интересны ответы от тех, у кого есть опыт написания Perl, который использует эти модули и видел преимущества (или нет) от их использования; если ваша компания/проект имеет какие-либо политики, относящиеся к проверке типов; и любые проблемы с проверкой типов и производительностью.
ОБНОВЛЕНИЕ: Недавно я прочитал интересную статью по этому вопросу под названием "Сильное тестирование" и "Сильная типизация" . Игнорируя небольшое смещение Python, он, по сути, утверждает, что проверка типов может задыхаться в некоторых случаях, и даже если ваша программа передает проверки типа, это не гарантирует правильности - правильные тесты - единственный способ убедиться.