[#] Нежная дружба агентов и исключений в SObjectizer
habrabot(difrex,1) — All
2016-10-10 13:30:04


Рано или поздно в программе что-нибудь идет не так. Не открылся файл, не создалась рабочая нить, не выделилась память… И с этим нужно как-то жить.



В небольшом однопоточном приложении довольно просто: можно прервать всю работу и рестартовать. Это один из факторов, благодаря которому Erlang снискал себе заслуженную популярность, ведь идеология [fail fast][1] является одним из краеугольных камней Erlang-а с его легковесными процессами. Если же приложение большое, сложное и многопоточное, то не разумно рестартовать все приложение, если лишь одна из его нитей столкнулась с проблемами. Еще хуже в ситуации с реализациями Модели Акторов, в которых сотни тысяч акторов могут работать на десятках рабочих нитей. Проблема одного актора вряд ли должна сказываться на всех остальных акторах.



В данной статье мы расскажем, как мы подошли к обработке ошибок в своем [фреймворке SObjectizer][2].



# Исключениям – да, кодам возврата – нет!



Когда SObjectizer-4 появился в 2002-ом году, мы сделали большую ошибку – предпочли использовать коды возврата исключениям. И весь последующий опыт разработки на SObjectizer-4 снова и снова убеждал в одной простой истине: если ошибка может быть прогнорирована разработчиком, то она будет им проигнорирована. Поэтому при создании SObjectizer-5 мы решили использовать исключения для информирования об ошибках.


[Читать дальше →][3]

[1]: https://en.wikipedia.org/wiki/Fail-fast
[2]: https://habrahabr.ru/post/304386/
[3]: https://habrahabr.ru/post/312128/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut