Отказоустойчивые программы не обязательно короче программ защитного стиля: это зависит от реализации и мер, необходимых для обеспечения безопасности вашего защитного кода.
В случае Erlang отказоустойчивые программыкак правило, короче из-за декларативного стиля и того, как виртуальная машина обеспечивает генерацию ошибок для вас.Например, в функции:
day(1) -> sunday;
day(2) -> monday;
day(3) -> tuesday;
day(4) -> wednesday;
day(5) -> thursday;
day(6) -> friday;
day(7) -> saturday;
Любое непредвиденное значение, переданное функции, приведет к ошибке, которая может быть перехвачена и обработана другим процессом (например, супервизором).Такие ошибки также никогда не будут подвергать опасности систему в целом и не требуют добавления кода в саму функцию - все это делается за пределами нормального пути выполнения с помощью заранее определенного поведения.
В динамическом языке, где отказоустойчивость не является нормой, вам придется вручную проверять границы и создавать исключение самостоятельно.Затем вы должны отловить исключение локально (попытка верхнего уровня ... включена отловка), если вы не хотите, чтобы вся система вышла из строя.Код обработки ошибок обычно должен быть вставлен по всему обычному пути выполнения.
В статическом языке, где отказоустойчивость не является нормой, то как долго ваш код будет сильно зависеть от системы типов, которую вы используете.иметь.Если язык позволяет определять типы, в которых крайние случаи в конечном итоге проверяются для вас компилятором, то вам обычно не нужно обрабатывать это внутри кода, вне недетерминированных событий (файлы не работают, неожиданный ввод данных пользователем и т. Д.).В языках с такими системами типов многие ошибки будут обнаружены до выполнения, поэтому у вас не будет такого количества защитных случаев.
Когда невозможно избежать обработки ошибок, языки, поддерживающие отказоустойчивые идиомы (например, Erlang)будет позволять возможно более четкий код, чем языки, которые этого не делают (статические или нет), главным образом потому, что код для особых случаев не смешивается с кодом для идеального пути выполнения.