Сообщение 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 код освобождения ресурса не находится рядом с объявлением и добавляется один отступ для внутреннего кода. Это менее удобно, но принципиально ничего не меняет.
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 есть статические анализаторы кода, которые тебе подскажут, если ты забыл закрыть ресурс. Проблемой при хорошей организации процесса я это не считаю.
J>Так в С++ как раз совершенно другая картина, именно из-за того, что 1) исключения не летят откуда угодно, потому что нет рантайма, который бы их бросал, и 2) из-за наличия деструкторов, в которые ты кладешь код очистки/отката в случае неудачи — именно за счет деструкторов в С++ достигается автоматическая обработка исключений.
J>В D тем же самым занимается scope(failure).
J>А в Java этого нет, да. Нам их тоже жалко
J>Цитата относится больше к Java, чем не к исключениям вообще.
В Java есть try-with-resources, он ничем не хуже вышеперечисленных вариантов. Аналог scope(failure) это try-finally. Разница только в том, что в try-finally код освобождения ресурса не находится рядом с объявлением и добавляется один отступ для внутреннего кода. Это менее удобно, но принципиально ничего не меняет.
Разве что деструктор невозможно забыть вызвать, но в принципе в Java есть статические анализаторы кода, которые тебе подскажут, если ты забыл закрыть ресурс. Проблемой при хорошей организации процесса я это не считаю.