Re
От: Eye of Hell  
Дата: 11.11.14 07:45
Оценка:
vsb>Какие есть серьёзные аргументы против исключений и за (извиняюсь за каламбур) возврат к кодам возврата? Ведь это же ужасный код, когда после вызова каждой функции мы тут же проверяем err и если он не null, просто передаём его наверх. Это то, от чего избавляют исключения.
vsb>Я перечитал много разных статей, но нигде не видел чётких аргументов в пользу отказа от исключений. Go вообще забавный язык, panic()/recover() это исключений как они есть, один в один. Любой код с исключениями тривиальными заменами преобразовывается в код с panic()/recover(). Но при этом они утверждают, что от исключений они избавились.

С точки зрения программиста, в коде могут случиться ожидаемые ошибки, которые он готов обработать, например нет файла. Файла, который хочет открыть пользователь. И неожиданные ошибки, которые он не хочет обрабатывать и хочет крешиться, например нет файла. Файла библиотки программы. Когда программист пишет код, он хочет для мест с ожидаемыми ошибками указать, какие исключение ловить. И не может — потому что во всех существующих реализациях нет возможности быстро понять, какие именно исключения может кинуть функция в той или иной ситуации. К примеру, использует разработчик функцию функцию работы с сетью, и хочет написать что потеря соединения — это ожидаемая ошибка, ее нужно ловить, по всем остальным нужно крешиться. Все работает два дня, а потом крешится на каком-нибудь OSError, которое "тоже потеря сетевого соединения, но на другом уровне абстракции". Еще через неделю там же крешится на SocketError, которое тоже потеря сетевого соединения, но в другом месте... И так может продолжаться бесконечно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.