Почему сбой, быстро разрабатывают программы короче, чем защитные программы стиля?

Я читал о том, как стиль сбоя быстро программирования на языках как Erlang заканчивается с намного более короткими программами, чем защитный стиль, найденный на большинстве других языков. Это корректно для всех типов программ и каково обоснование для этого?

6
задан 2 revs, 2 users 100% 22 June 2010 в 15:00
поделиться

3 ответа

Отказоустойчивые программы не обязательно короче, чем программы защитного стиля: это зависит от реализации и мер, необходимых для обеспечения безопасности защитного кода.

В случае Erlang отказоустойчивые программы обычно короче из-за декларативного стиля и того, как VM заботится о том, чтобы генерировать для вас случаи ошибок. Например, в функции:

day(1) -> sunday;
day(2) -> monday;
day(3) -> tuesday;
day(4) -> wednesday;
day(5) -> thursday;
day(6) -> friday;
day(7) -> saturday;

Любое неожиданное значение, переданное в функцию, приведет к ошибке, которая может быть поймана и обработана другим процессом (т.е. супервизором). Такие ошибки также никогда не будут угрожать системе в целом и не требуют добавления кода в саму функцию - все это делается вне обычного пути выполнения с помощью предопределенного поведения.

В динамическом языке, где отказоустойчивость не является нормой, вам пришлось бы вручную проверять границы и самостоятельно сбрасывать исключение. Затем вы должны поймать исключение локально (включая верхнеуровневые try ... catches), если не хотите, чтобы вся система упала. Код обработки ошибок обычно приходится вставлять на протяжении всего нормального пути выполнения.

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

Когда обработки ошибок не избежать, языки, поддерживающие идиомы отказоустойчивости (например, Erlang), позволяют создавать, возможно, более чистый код, чем языки, которые этого не делают (статические или нет), в основном потому, что код для особых случаев не смешивается с кодом для идеального пути выполнения.

10
ответ дан 9 December 2019 в 22:28
поделиться

См. Разделы 4.3 и 4.4 диссертации Джо Армстронга .

5
ответ дан 9 December 2019 в 22:28
поделиться

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

Программирование в защитном стиле, напротив, фокусируется на проверке ввода от пользователя и других частей кода. Код более подробный, потому что программист должен тщательно проверять ввод и корректно отказывать в случае ошибки. Это привело к большему количеству кода (с точки зрения программистов) и более надежному приложению (с точки зрения пользователей).

-4
ответ дан 9 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

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