Информация об изменениях

Сообщение Re[3]: Какие у исключений проблемы? от 05.11.2014 8:51

Изменено 05.11.2014 8:52 vsb

Здравствуйте, jazzer, Вы писали:

J>Так в С++ как раз совершенно другая картина, именно из-за того, что 1) исключения не летят откуда угодно, потому что нет рантайма, который бы их бросал, и 2) из-за наличия деструкторов, в которые ты кладешь код очистки/отката в случае неудачи — именно за счет деструкторов в С++ достигается автоматическая обработка исключений.

J>В D тем же самым занимается scope(failure).
J>А в Java этого нет, да. Нам их тоже жалко
J>Цитата относится больше к Java, чем не к исключениям вообще.

В Java есть try-with-resources, он ничем не хуже вышеперечисленных вариантов. Аналог scope(failure) это try-finally. Разница только в том, что в try-finally код освобождения ресурса не находится рядом с объявлением и добавляется один отступ для внутреннего кода. Это менее удобно, но принципиально ничего не меняет.
Re[3]: Какие у исключений проблемы?
Здравствуйте, jazzer, Вы писали:

J>Так в С++ как раз совершенно другая картина, именно из-за того, что 1) исключения не летят откуда угодно, потому что нет рантайма, который бы их бросал, и 2) из-за наличия деструкторов, в которые ты кладешь код очистки/отката в случае неудачи — именно за счет деструкторов в С++ достигается автоматическая обработка исключений.

J>В D тем же самым занимается scope(failure).
J>А в Java этого нет, да. Нам их тоже жалко
J>Цитата относится больше к Java, чем не к исключениям вообще.

В Java есть try-with-resources, он ничем не хуже вышеперечисленных вариантов. Аналог scope(failure) это try-finally. Разница только в том, что в try-finally код освобождения ресурса не находится рядом с объявлением и добавляется один отступ для внутреннего кода. Это менее удобно, но принципиально ничего не меняет.

Разве что деструктор невозможно забыть вызвать, но в принципе в Java есть статические анализаторы кода, которые тебе подскажут, если ты забыл закрыть ресурс. Проблемой при хорошей организации процесса я это не считаю.