Я исследую использование DbC в наших проектах Perl, и я пытаюсь найти лучший способ проверить контракты в источнике (например, проверяю пред/сообщение условия, инварианты, и т.д.),
Класс:: Договор был составлен Damian Conway и теперь сохраняется C. Garret Goebel, но похоже, что это не было затронуто за более чем 8 лет.
Похоже на то, что я хочу использовать, Американский лось, поскольку кажется, как будто это могло бы предложить функциональность, которая могла использоваться для DbC, но я задавался вопросом, были ли у кого-либо какие-либо ресурсы (статьи, и т.д.) о том, как пойти об этом, или если существуют любые полезные модули там, что я не был в состоянии найти.
Кто-либо делает DbC с Perl? Я должен просто "вскочить" Американскому лосю и видеть то, что я могу заставить его делать для меня?
Американский лось дает Вам много инструментов (если не весь сахар), чтобы сделать DbC. А именно, можно использовать прежде, после и вокруг рычагов метода вотнекоторые примеры( ) для выполнения безотносительно утверждений, которые Вы могли бы хотеть сделать на аргументах и возвращаемых значениях.
Как альтернатива "самокрутке DbC" Вы могли использовать модуль как MooseX:: Метод:: Подписи или MooseX:: Метод для заботы о проверке параметров передал подпрограмме. Эти модули не обрабатывают "сообщение" или "инвариантные" проверки, которые DbC обычно обеспечивает, как бы то ни было.
Править: Мотивированный этим вопросом, я взломал вместе MooseX:: Контракт и загруженный это на CPAN. Мне было бы любопытно получить обратную связь на API, поскольку я действительно никогда не использовал DbC непосредственно.
Американский лось является превосходной oo системой для жемчуга, и я сердечно рекомендую это для любого кодирующего объекты в жемчуге. Можно указать "подтипы" для участников класса, которые будут осуществлены, когда установлено средствами доступа, или конструкторы (та же система может использоваться с Американским лосем:: пакет Методов для функций). При кодировании больше чем одного лайнера используйте Американского лося;
Что касается выполнения DbC, ну, в общем, не могло бы быть лучшее пригодное для perl5. Это будет твердым на языке, который предлагает Вам очень немного гарантий. Лично, на большом количестве динамических языков, но особенно жемчуге, я склонен делать свою направляющую философию DRY и разработкой через тестирование.
Я также рекомендовал бы использовать Американского лося.
Однако как "альтернатива" смотрят на Sub:: Контракт.
Заключить автору в кавычки....
Sub:: Контракт предлагает прагматический способ реализовать части программирования парадигмой контракта в Perl.
Sub:: Контракт не является платформой дизайна контракта.
Sub:: Контракт стремится делать очень легким ограничить входные параметры подпрограмм и возвращаемые значения для эмуляции строгого контроля типов во времени выполнения.
Если вам не нужны инварианты классов, я считаю, что следующая рекомендация из книги Perl Hacks является хорошим решением для некоторых программ. См. Smart :: Комментарии
.