> -- Илья Ермаков писал(а):
> Ошибки, про которые Вы говорите (при взаимодействии с внешней средой) - это пока ещё НЕ ИСКЛЮЧЕНИЯ.

Я как раз и говорю, чтоочень удобно, когда все ошибки - исключения. И упоминавшееся здесь открытие файла тоже (если не путать действие "открытие файла" с действием "проверка существования файла"). Удобно как раз потому, что это позволяет ужесточить контракт (пред-постусловия). Грубо говоря, если вы пишите функцию, которая использует только функции с таким ужесточенным контрактом (файл всегда открывается), то ваша функция так же автоматически начинает обеспечивать более жесткий контракт (начинает возвращатьрезультат, а не код ошибки). Единственный случай, когда коды ошибки лучше, это когда вы их проверяетеи обрабатываетесразу после вызова каждой функции. Но я такого кода в своей практике еще не встречал. Обычно от места возникновения до места обработки есть не менее десятка вызовов. Особенно в больших/сложных системах с их коллбэками и делегированием функциональности.

Что касается многопоточности, то это ортогональное свойство системы. До тех пор, пока у вас будет существовать понятие стэка вызовов, механизм исключений будет востребован.