Почему неудачные программы быстрого стиля короче, чем программы защитного стиля? - PullRequest
6 голосов
/ 22 июня 2010

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

Ответы [ 3 ]

10 голосов
/ 23 июня 2010

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

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

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

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

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

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

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

5 голосов
/ 22 июня 2010

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

0 голосов
/ 22 июня 2010

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

...