Где целесообразно выполнять проверку ввода в Erlang?

Я пишу модуль, который запускает конечный конечный автомат * на основе содержимого массива записей, переданных при инициализации. Каждая запись описывает состояние и включает инструкции о том, как действовать на входы (т. Е. В состоянии S1, input I запускает переход в состояние S2). Чтобы FSM правильно работал, переходные состояния должны существовать.

Мое quandary - это то, где можно проверить эти переходы.

Защитный программист во мне говорит сделать это как можно раньше, например, когда FSM инициализируется. Это означает, что я могу поднять ошибку, когда я впервые предоставил фиктивные данные и не откажусь от процесса, который впоследствии может завершиться неудачей. Остальная часть реализации не должна быть такой же защитной, потому что эта таблица, как известно, хороша, и любые ошибки, которые Эрланг решает повысить, будут результатом реализации, а не с плохими данными. Это также облегчит отладку для тех, кто использует модуль, поскольку они получат код badarg или что-то еще сразу, вместо того, мои источники позже выяснили, что это была их ошибка, а не моя.

Философия Эрланга, по-видимому, заключается в том, что нужно оставлять все возможное, чтобы работать как можно дольше, не справляясь только тогда, когда они должны и позволяют супервайзеру заботиться о том, чтобы собрать куски. С одной стороны, это имеет смысл, потому что данный FSM может работать вечно, не встречая входов, которые потребуются для плохого перехода. С другой стороны, неудача в конце ставит бремя на звонящих, чтобы написать повторяющиеся тесты для чего-то, что легко для меня реализовать один раз.

Я знаю, что большинство правил в этом бизнесе не сложно и быстро, но один подход более «Эрланги», чем другой? Неужели неудачная реализация окажется неуместной, если ее выпустили для других?


* Мне известно поведение gen_fsm, и то, что я делаю, имеет некоторые сравнительные недостатки. Это упражнение для изучения некоторых других вещей, а FSM - это то, что их объединяет.

7 голосов | спросил Blrfl 18 Maypm13 2013, 22:20:13

1 ответ


1

Причина, по которой кажется, что «Erlangy» делает ненужную проверку типов, заключается в том, что язык динамически типизирован.

Если вам действительно нужно убедиться, что данные определенного типа используются, вы можете использовать функции is_TYPE /1, чтобы проверить ваш ввод в качестве защитных выражений. Вы должны сделать это, как только сможете.

http://learnyousomeerlang.com/types-or-lack-thereof

ответил T.T 23 J000000Tuesday13 2013, 19:46:06

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132