metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2014-09-29 11:55 am

С++ EH и логика на исключениях

Хорошо ли в C++ программе делать логику на исключениях?
Я ща втыкаю в одну опенсорсную СУБД в продакшене отладчиком и вижу что там на каждый запрос валится стопицот крестиковых исключений, и не понимаю, это нормально или нет.

[identity profile] veter-r-r.livejournal.com 2014-09-29 11:19 am (UTC)(link)
А есть языки, в которых логику на исключениях делать хорошо?

[identity profile] veter-r-r.livejournal.com 2014-09-29 11:38 am (UTC)(link)
там не на исключениях, а на психотропах

[identity profile] nivanych.livejournal.com 2014-09-29 06:12 pm (UTC)(link)
Агда же!

[identity profile] potan.livejournal.com 2014-09-30 01:33 pm (UTC)(link)
Нет, исключения там только в IO-монаде.

[identity profile] permea-kra.livejournal.com 2014-10-07 07:56 am (UTC)(link)
>Нет, исключения там только в IO-монаде.

Это неправда, исключения там есть еще в Either(T) & Maybe(T), плюс при желании можно бросить исключение даже в чистом коде через fail :: String -> a или неполный паттерн-матчинг. Другое дело, что это порицается.

[identity profile] potan.livejournal.com 2014-10-07 08:00 am (UTC)(link)
Either и Maybe - это скорее аналоги null и кодов ошибок, а совсем не исключения.
fail - это монада. Неполный паттерн-матчинг, как и деление на ноль, конечно способ бросить исключение в чистом коде, но перехватить его можно только в монаде IO.

[identity profile] permea-kra.livejournal.com 2014-10-08 10:31 am (UTC)(link)
Тьфу ты. Не fail, а error, да. Но возможность есть.

Перехват исключений - да, только в IO.

[identity profile] potan.livejournal.com 2014-09-30 01:35 pm (UTC)(link)
В OCaml так любят делать. Там исключения очень эффективно реализованы.
В MzScheme(Racket) в стандартной библиотеке ошибки бросают исключения, хоть они и тормозят.