Почему программы Fail Fast Style короче программ защитного стиля?

StackOverflow https://stackoverflow.com/questions/3093181

Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top