2015-09-28 3 views
4

В нижеследующем параграфе раздела приведены следующие строки: http://aosabook.org/en/riak.html. 15.1. Сокращенное Введение в Erlang:.Необоронительное программирование в Эрланге

«Вызов функции с отрицательным числом приведет к ошибке времени выполнения, так как никто из матча Морозов не обрабатывает этот случая является примером необоронительных программировании практика поощрялась в Эрланге ».

Два вопроса: каким образом идиоматический способ обработки полученной ошибки в Erlang; и почему это было бы лучше, чем явно охватывать все случаи, как на языках, таких как OCaml или Haskell?

ответ

8

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

  • код меньше, легче читать, ориентированное на функцию реализации.

  • В случае ошибок система поднимет ошибку, совместимую со стандартом OTP, вы получите бесплатно все механизмы OTP для обработки ситуации на соответствующем уровне.

  • вы автоматически избегаете синдрома обнаружения ошибок «лазаньи», где многие слои кода отслеживают один и тот же случай ошибки.

Теперь вы можете сосредоточиться на управлении ошибками: где вы будете обрабатывать ошибки. Erlang предлагает классический способ с операторами try и catch и имеет более идиоматический путь с деревом наблюдения OTP и механизмом связи и мониторинга.

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

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

Я фанат learnyousomeerlang веб-сайт, где вы найдете 3 главы, связанные с управлением ошибки:

  • Ошибки и исключения
  • Ошибки и процессы
  • наблюдающий контролеры?
Смежные вопросы