> исключения — это fuckin' uncontrollable mess. прежде всего.:-) Это лозунг. Как "земля - крестьянам, фабрики - рабочим..." В каждом конкретном случае он может быть правдой, может быть неправдой, или может постепенно дрейфовать из одной крайности в другую.
> во-первых, они нарушают execution flow, и в итоге *весь* код должен учитывать
> наличие исключений, даже если он их не использует.
Ну, Вы понимаете, что типичное для C и Go программ 'if (rc != 0) { сделайте с этим что-нибудь! }' - это точно такое же нарушение нормального хода выполнения? Да, в Go есть ещё и defer'ы, которые частично ситуацию исправляют, а частично - запутывают её. По сути, в большинстве случаев, defer - это такой аналог вызова деструктора на размотке стека, только явно прописанный. А коли явно, значит, о нём можно забыть, перепутать порядок следования и прочая-прочая-прочая.
> особенно больно надо бить по почкам, если execution flow ломает библиотека:
> in no fuckin' way any library should go out of control.
Опять же, если библиотека разумно спроектирована и аккуратно оповещает пользователя о том,
что в ней что-то может пойти не так (а то, что пойти не так может - это, я думаю, неоспариваемо?), то, по большому счёту, выбор метода оповещения - это исключительно вопрос синтаксических средств. За исключением того, что эксепшны - это _единообразный_
способ оповещения, а в Go'шных либах встречается и rc, и паника, там где автор поленился поймать панику на выходах из либы и обернуть её в rc.
> в итоге получается то же самое, что и без исключений, только if'ы заменяются на
> catch'и. ну, и компилятор нагружается лишней ерундой.
Ну, есть возможность не делать ничего на тех уровнях, где контроль не нужен (== там, где мы ничего осмысленного с этим сделать не можем). О существовании эксепшнов на таких уровнях напоминают только сигнатуры методов. Но за правильностью сигнатур IDE/чекеры отлично следят. Ну а заботиться об удобстве компилятора в ущерб удобству глаз и рук - это, действительно, слегка мазохизм.
> вообще, всё — от неправильной трактовки исключений. исключение — это «а-а-а-а,
> паника, спасай что можешь и ползи на кладбище!»,
Нет. Это способ аккуратно передать управление из того места, где жопа случилась, в то место, где с этой жопой можно сделать что-либо осмысленное.
> если произошло исключение — никаких catch нет и быть не должно, максимум — быстрый
> cleanup с вываливанием на диск каких-нибудь потрохов, которые потом будет разбирать
> recovery system.
Вы путаете с abort(3)/std::terminate/java.lang.Error(). Там, да, методика обработки именно такая.
> вариант эффективной борьбы с ней — вообще выкинуть catch.
> вообще, это вопрос разных «школ».
Ну, мне вот, да, представляется что это скорее педагогический вопрос, а не техническое преимущество. Но запретить, знаете ли, всегда проще, чем научить, как именно этим пользоваться.
> большие проекты в итоге приходят к очень строгой политике контроля и битию
> по голове за библиотеки, которые кидаются своими отрыжками во все стороны.
> именно потому, что со временем контролировать это всё сложнее и сложнее.
Ну, у нас есть несколько больших проектов (на Яве), и тщательно продуманное и прописанное полиси, что есть Checked Exception, в каких случаях нужен Unchecked, а в каких обязателен Error (такие случаи тоже есть, хотя их заведомо меньше пальцев на одной руке :)), и где именно обрабатывать. В общем, как-то справляемся :)
> не понимают ключевого постулата: «exception is not a control flow statement».
Хех :) На то у нас есть свой постулат, не хуже Вашего ;) Но, подчёркиваю, реальная жизнь она сложнее лозунгов и постулатов.
> просто в качестве курьёза, не в качестве иллюстрации тезиса: мне доводилось видеть
> программу, где функции возвращали значение через throw.
Ну а на то есть Gerrit Code Review, прочная металлическая линейка и доска почёта. Хотя, подчёркиваю ещё раз, не поглядев на тот код, а также на условия его написания, я не возьмусь однозначно за линейку.
Вообще, решать проблемы педагогические путём запретов - это всё равно, что своего ребёнка отучать курить, обыскивая его карманы в поисках табачных крошек и жестоко карая за это. Свинья в любом случае грязь найдёт.
В общем, позицию я Вашу, в целом, понял. А вот детали...