Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Считается ли дурным тоном в создаваемом проекте не обрабатывать исключения ? Недавно довелось ознакомиться с процессом разработки одной команды. Делали клиентскую часть, 4 человека, пол года работы. Тим лид строго запретил обрабатывать исключения... Одному мне это кажется неправильным, или подобное часто практикуется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2013, 18:30 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
stuffy.regСчитается ли дурным тоном в создаваемом проекте не обрабатывать исключения ? Недавно довелось ознакомиться с процессом разработки одной команды. Делали клиентскую часть, 4 человека, пол года работы. Тим лид строго запретил обрабатывать исключения... Одному мне это кажется неправильным, или подобное часто практикуется? Скорее всего ты либо не правильно понял тимлида, либо речь шла об ограничении тех видов исключений, обработка которых зашита в глобальном обработчике исключений и осуществляется централизованно. Сам посуди. Если ты в своем коде перехватил исключение и обработал его нестандартным образом, выведя его на экран с помощью MessageBox, тогда как все остальные ошибки у вас выводятся специальным диалогом с возможностью отправки ошибок в службу поддержи, ясно, что это никогда не будет одобрено тимлидом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2013, 19:10 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Анатолий Широковstuffy.regСчитается ли дурным тоном в создаваемом проекте не обрабатывать исключения ? Недавно довелось ознакомиться с процессом разработки одной команды. Делали клиентскую часть, 4 человека, пол года работы. Тим лид строго запретил обрабатывать исключения... Одному мне это кажется неправильным, или подобное часто практикуется? Скорее всего ты либо не правильно понял тимлида, либо речь шла об ограничении тех видов исключений, обработка которых зашита в глобальном обработчике исключений и осуществляется централизованно. Сам посуди. Если ты в своем коде перехватил исключение и обработал его нестандартным образом, выведя его на экран с помощью MessageBox, тогда как все остальные ошибки у вас выводятся специальным диалогом с возможностью отправки ошибок в службу поддержи, ясно, что это никогда не будет одобрено тимлидом. Глобальном обработчике это до самого верху стек раскручивают, а как узнают о конкретном месте возникновения исключения? Не лучше ли самому поймать исключение, вывести на экран, и сделать rethrow с добавлением к строке информации о месте возникновения исключения, или использовать для этого std::throw_with_nested(std::logic_error(std::string(__FILE__) + std::to_string(__LINE__) + __FUNCTION__)); ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2013, 22:48 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Считается ли дурным тоном в создаваемом проекте не обрабатывать исключения ? Нет, в общем случае. Вообще, в с++ исключения можно вообще не использовать. Недавно довелось ознакомиться с процессом разработки одной команды. Делали клиентскую часть, 4 человека, пол года работы. Тим лид строго запретил обрабатывать исключения... Одному мне это кажется неправильным, или подобное часто практикуется? Не часто, но бывает. В современном с++ безусловно выглядит странно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2013, 23:42 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
stuffy.regОдному мне это кажется неправильным, или подобное часто практикуется? Сама по себе задача обработки исключения порождает еще целый ворох проблем. А именно - как обработать? Игнорировать? Логгировать? Обернуть в другой тип исключения и передать наверх? e.t.c. Поэтому иногда лучше ничего не сделать чем "замылить" ошибку, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 00:12 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
С исключениями главное - единый подход во всем приложении, иначе будет несопровождаемое месиво. А вообще это конечно скорее религиозный вопрос, чем технический. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 01:51 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
maytonstuffy.regОдному мне это кажется неправильным, или подобное часто практикуется? Сама по себе задача обработки исключения порождает еще целый ворох проблем. А именно - как обработать? Игнорировать? Логгировать? Обернуть в другой тип исключения и передать наверх? e.t.c. Поэтому иногда лучше ничего не сделать чем "замылить" ошибку, Вообще ничего не делать, даже не выводить и не логировать сообщение исключения, и не реализовывать std::unexpected_handler() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 01:59 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Мне трудно понять что имел в виду тот ПМ. Но я вижу его месседж в том чтобы молясь богу не разбить себе голову. Хватает кодов возврата, errno, GetLastError e.t.c. для решения задачи ? Хватает ? - Пользуйтесь. Для языков и систем разработки где НЕЛЬЗЯ по другому получить состояние ошибки - использовать обязательную обработку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 02:10 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков, уточнил еще раз. В коде нет связок try-catch. На сервер информация об ошибках не отправляется. Это клиентская часть он-лайн игры. Предусмотренно стандартное окно сообщения об ошибке. Используется при парсинге протокола: проверяется наличие некоторых ключей json-a. Причем не всех. Если не нашли то что проверяли - сообщение об ошибке и рестарт игры. Если не нашли и проверки на существование ключа не было - все просто падает. В игровой механике так же в случае любой ошибки все падает. Это был мой первый опыт с гемдевом. Может это специфика индустрии и у них часто так принято? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 02:12 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyС исключениями главное - единый подход во всем приложении, иначе будет несопровождаемое месиво. А вообще это конечно скорее религиозный вопрос, чем технический. Да, знаю из бесед, что этого тим лида год назад не взяли в яндекс, проблемы на интервью были как раз с вопросами про обработку исключений. (* это не сарказм, просто совпадение, я слышал от него самого, что была куча вопросов на эту тему) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 02:19 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
stuffy.reg Это был мой первый опыт с гемдевом. Может это специфика индустрии и у них часто так принято? Точно нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 07:39 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
MasterZivstuffy.regЭто был мой первый опыт с гемдевом. Может это специфика индустрии и у них часто так принято? Точно нет. Ну я бы так не говорит однозначно. Во всех игрушках что я играл, периодически происходил вылет на самом интересном месте. Отсюда вывод - скорее у них принято как раз обратное - не ловить исключения :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 14:40 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Есть еще вариант что по некоторым соображенииям экономят ресурсы. Ну типа... исключения которые валят в цикле - это нагрузка на вычислительную систему. Проще проверить return code. Как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 15:06 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
maytonЕсть еще вариант что по некоторым соображенииям экономят ресурсы. Ну типа... исключения которые валят в цикле - это нагрузка на вычислительную систему. Проще проверить return code. Как-то так. Ну это у них уже исключение головного мозга :) Как раз таки основное преимущество исключений над кодом возврата, что код возврата всегда должен проверяться на каждой итерации, а исключение можно ловить один раз на весь цикл: http://forums.pcsx2.net/Thread-blog-C-exceptions-can-be-an-optimization ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 15:14 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Наверное есть разные механизмы генерации исключений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 16:32 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Обработка исключений вообще и спецификации исключений, в частности, добавляют накладные расходы времени исполнения, даже если никакие исключения не возникают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 16:51 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovОбработка исключений вообще и спецификации исключений, в частности, добавляют накладные расходы времени исполнения, даже если никакие исключения не возникают. Получение кода возврата, его проверка и условный переход в сумме добавляют больше накладных расходов - пример по ссылке выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 18:34 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Возможность написать: Код: sql 1. 2. 3. 4. 5. не зависит от (не)желания использовать исключения. P.S. И давно try/catch стал дешевле if-а? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 18:51 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovВозможность написать: Код: sql 1. 2. 3. 4. 5. не зависит от (не)желания использовать исключения. P.S. И давно try/catch стал дешевле if-а? Да, сейчас сам проверил чего там пишут по ссылке, в общем случае в 2(MSVC)-4(GCC) раза медленней исключения чем код возврата, по крайней мере на таких простых примерах. http://ideone.com/rx4qqF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 19:34 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovОбработка исключений вообще и спецификации исключений, в частности, добавляют накладные расходы времени исполнения, даже если никакие исключения не возникают. Обработка кодов возвратов также добавляет накладные расходы времени выполнения, даже если ошибок не возникает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 20:36 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
MasterZivBasil A. SidorovОбработка исключений вообще и спецификации исключений, в частности, добавляют накладные расходы времени исполнения, даже если никакие исключения не возникают. Обработка кодов возвратов также добавляет накладные расходы времени выполнения, даже если ошибок не возникает. Я бы даже сказал больше. Если взять С++ и специально не извращаться (через throw() у каждой функции), то при использовании кодов возврата компилятор сгенерит и код для поддержки исключений (вдобавок к юзерской обработке кодов возврата). Т.е. для случая "даже если никакие исключения не возникают" коды будут медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 21:05 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, а если так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 07:05 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyMasterZivпропущено... Обработка кодов возвратов также добавляет накладные расходы времени выполнения, даже если ошибок не возникает. Я бы даже сказал больше. Если взять С++ и специально не извращаться (через throw() у каждой функции), то при использовании кодов возврата компилятор сгенерит и код для поддержки исключений (вдобавок к юзерской обработке кодов возврата). Т.е. для случая "даже если никакие исключения не возникают" коды будут медленнее. Анатолий, полностью отключить исключения — это один флаг компилятора. Кто не любит исключения, кончено, хорошо про этот флаг знают. Единственно, я совсем не понимаю, как в этом случае будет работать STD, хотя его конечно можно и вообще не использовать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 10:19 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
? http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Exceptions Я думаю, в такой конторе здоровой как гуголь, существует не один стандарт кодирования. То, что для каких-то проектов исключения могут не подходить, я вполне согласен. Тем не менее, то, что исключения — генеральная линия развития С++ - несомненно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 10:29 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
? http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Exceptions Кстати, доводы против исключений все абсолютно дурацкие, все в стиле " как бы чего не вышло ", в современных условиях современный с++ программист и так обязан учитывать все то, что у них записано в Cons. Код тестировать все равно надо, так что что с исключениями, что без, одинаково. В общем, кто-то очень хотел запретить исключения, и запретил. По всем бюрократическим правилам, демократично решил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 10:37 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
MasterZivКстати, доводы против исключений все абсолютно дурацкие, все в стиле " как бы чего не вышло ", в современных условиях современный с++ программист и так обязан учитывать все то, что у них записано в Cons. Код тестировать все равно надо, так что что с исключениями, что без, одинаково. В общем, кто-то очень хотел запретить исключения, и запретил. По всем бюрократическим правилам, демократично решил.Ну да, с++ программист обязан учитывать, что любая функция может выкинуть абсолютно любое исключение, которое непонятно как обрабатывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 12:23 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?MasterZivКстати, доводы против исключений все абсолютно дурацкие, все в стиле " как бы чего не вышло ", в современных условиях современный с++ программист и так обязан учитывать все то, что у них записано в Cons. Код тестировать все равно надо, так что что с исключениями, что без, одинаково. В общем, кто-то очень хотел запретить исключения, и запретил. По всем бюрократическим правилам, демократично решил.Ну да, с++ программист обязан учитывать, что любая функция может выкинуть абсолютно любое исключение, которое непонятно как обрабатывать. А с-программист обязан учитывать, что любая функция может выкинуть абсолютно любой код возврата, который непонятно как обрабатывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 12:25 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
А бывают еще и Unhandled C++ Exceptions .. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 12:33 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Про отключенные исключения. Я понимаю что их можно отключить. Но это сразу отключает многие фичи буста и стл, и многих других библиотек, без которых ни один крупный проект не обходится. Так что помечтать можно, а потом надо спуститься на землю и признать что отключать исключения никто не будет, также как и писать throw() на каждую функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 12:47 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
maytonА бывают еще и Unhandled C++ Exceptions .. В Win32/64 бывают и Unhandled non-C++ exceptions... В Linux/Unix бывают сигналы ... и что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 13:50 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?Ну да, с++ программист обязан учитывать, что любая функция может выкинуть абсолютно любое исключение, которое непонятно как обрабатывать. Именно. Мне кажется, что ты пытался заложить в текст твоего сообщения какой-то сарказм, однако ему тут не место -- это абсолютно нормальная ситуация. Ты должен быть готов к любым исключениям, но если ты не знаешь, что это за исключение будет или не знаешь, что с ним делать -- просто ничего не делай. Но локальные ресурсы надо защитить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 13:52 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyПро отключенные исключения. Я понимаю что их можно отключить. Но это сразу отключает многие фичи буста и стл, и многих других библиотек, без которых ни один крупный проект не обходится. Так что помечтать можно, а потом надо спуститься на землю и признать что отключать исключения никто не будет, также как и писать throw() на каждую функцию. Так если гугловцы не используют исключения, они должны их выключать при сборке, либо быть готовым ко всему, что у них записано в CONS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 13:54 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
MasterZiv, У гугловцев есть возможность закидать всех шапками (реализовать все необходимые им библиотеки самим). Так что может и отключают. Обычные разработчики - не могут себе это позволить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 13:58 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
любой код возврата?пропущено... Ну да, с++ программист обязан учитывать, что любая функция может выкинуть абсолютно любое исключение, которое непонятно как обрабатывать. А с-программист обязан учитывать, что любая функция может выкинуть абсолютно любой код возврата, который непонятно как обрабатывать Вообще, функция должна возвращать свой результат, а не признак успешного завершения. Я так глубоко убеждён. И кодирование это на С в старом стиле K&R -- это на самом деле какой-то ад, а не программирование. Там вот и пишут такие саги на 3 страницы, которые всего-то открывают файл. Оно конечно, где-то и такой код нужен, и оправдан, но уж больно он черезжопенский. И ещё на счёт исключений -- я глубоко убеждён, что не любит исключения только тот, кто их не понимает. А не понимает он их только по одной причине -- не хочет понять. Потому что исключения -- очень простая концепция, уже вошедшая во многие современные языки, и ничего сложного в них нет, это очень легко понять. Это даже не conditions из common lisp и не continuation из schema. Это очень просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 14:00 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
MasterZivА не понимает он их только по одной причине -- не хочет понять. Думаю что и претенции к скорости исключений тоже всего лишь повод. Т.к. в подавляющем большинстве случаев скорость не важна. Намного важнее читаемость и сопровождаемость кода, что как раз дают исключения (если применять с умом) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 14:06 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
MasterZivно если ты не знаешь, что это за исключение будет или не знаешь, что с ним делать -- просто ничего не делайИменно это и предлагается в первом посте топика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 14:17 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyMasterZivА не понимает он их только по одной причине -- не хочет понять. Думаю что и претенции к скорости исключений тоже всего лишь повод. Т.к. в подавляющем большинстве случаев скорость не важна. Намного важнее читаемость и сопровождаемость кода, что как раз дают исключения (если применять с умом) Скорость важна в численных методах к примеру, но там нет места try{..}catch и если хотят фиксировать деления нуля на ноль то скорее всего выставляют проверяют NaN в на вершине стека FPU. Эдакая-себе "бесчувственная" молотилка чисел. Исключения - это всё-таки более высокий уровень и я думаю автор попал на "границу" между этими уровнями. Пускай хоть скажет что у него за код который якобы нивкоем разе не должен использовать исключения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 14:19 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
mayton, Так сказал же - игруха. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 14:25 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
любой код возвратаА с-программист обязан учитывать, что любая функция может выкинуть абсолютно любой код возврата, который непонятно как обрабатыватьНо только это не влияет на ход выполнения вашего кода. А с исключениями надо всегда учитывать, что следующая после вызова функции строка кода может и не выполниться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 14:25 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskymayton, Так сказал же - игруха. Дак фик его знает. Онаж игруха не только из engine состоит. Щас игрухи могут содержать вполне себе православный скриптинг. Язык сценариев. И там вполне возможно механизм exceptions будет полезен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 14:30 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
MasterZivВ Win32/64 бывают и Unhandled non-C++ exceptions... ну их-то обычно нет смысла перехватывать и пытаться продолжать работу В Linux/Unix бывают сигналы ... и после этого программа либо умерла, либо продолжила выполнение с того же места Проблема с исключениями только в том, что очень легко сделать ошибку, из-за которой после перехвата исключения программа продолжит работу с неправильными данными. Иногда лучше, чтобы всё сразу упало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 14:34 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
MasterZivТак если гугловцы не используют исключения, они должны их выключать при сборке, либо быть готовым ко всему, что у них записано в CONS.не, это означает что любое исключение в стороннем коде - это total crash. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 14:58 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?любой код возвратаА с-программист обязан учитывать, что любая функция может выкинуть абсолютно любой код возврата, который непонятно как обрабатыватьНо только это не влияет на ход выполнения вашего кода. А с исключениями надо всегда учитывать, что следующая после вызова функции строка кода может и не выполниться. Это не так. Если например не выделилась память, а ты это не проверил через какой-то код возврата (да хоть тот же malloc на NULL), то первый же код, который эту память будет использовать, упадёт. Такие же случаи могут быть и с другими видами объектов и функциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 15:59 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
В Win32/64 бывают и Unhandled non-C++ exceptions... ну их-то обычно нет смысла перехватывать и пытаться продолжать работу Если бы это было бы так, то и исключения SEH никто бы не придумывал. Были бы как в линухе segfault -- и всё. Проблема с исключениями только в том, что очень легко сделать ошибку, из-за которой после перехвата исключения программа продолжит работу с неправильными данными. Иногда лучше, чтобы всё сразу упало. Это не проблема исключений или их отсутствия. Это -- вообще общая проблема программирования. Когда программируешь, очень легко сделать ошибку. Ну и что теперь с этим делать, не программировать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 16:03 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
MasterZivИ ещё на счёт исключений -- я глубоко убеждён, что не любит исключения только тот, кто их не понимает. А не понимает он их только по одной причине -- не хочет понять. Потому что исключения -- очень простая концепция, уже вошедшая во многие современные языки, и ничего сложного в них нет, это очень легко понять. Это даже не conditions из common lisp и не continuation из schema. Это очень просто.А я глубоко убежден что я не использую исключения именно потому что понимаю их :) Концепция простая, но излишне подверженная кривому кодированию. Есть языки где без исключений жить нельзя вообще (почти все функциональные например), но в С++ можно прекрасно жить без исключений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 20:35 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
White Owlно в С++ можно прекрасно жить без исключений Некоторые и без ног живут, и ставят спортивные рекорды. Но это не благодаря, а вопреки. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 20:56 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
White OwlMasterZivИ ещё на счёт исключений -- я глубоко убеждён, что не любит исключения только тот, кто их не понимает. А не понимает он их только по одной причине -- не хочет понять. Потому что исключения -- очень простая концепция, уже вошедшая во многие современные языки, и ничего сложного в них нет, это очень легко понять. Это даже не conditions из common lisp и не continuation из schema. Это очень просто.А я глубоко убежден что я не использую исключения именно потому что понимаю их :) Концепция простая, но излишне подверженная кривому кодированию. Есть языки где без исключений жить нельзя вообще (почти все функциональные например), но в С++ можно прекрасно жить без исключений. +1 Прекрасно понимаю. Я-бы и в java жил без Exceptions. Но кто надоумил Гослинга внедрить такой вот странный workaround вокруг таймаута (try {Thread.sleep(ms);} catch (InterruptedException e) {}). ИЧСХ по другому этот кусок кода не написать особенно если обёртывающий метод implemented жёстко заданный тип исключения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 21:26 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
mayton, А такое что мешает сделать? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 21:29 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Лень импорты тащить. Или декларации. Я уже докатился до того что создаю свои atoi, printf в java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 21:33 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
mayton, Так ошибся получается не тот, кто создал джаву, а тот кто на нее перешел с С :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 21:39 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Гослинг штоли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 21:40 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
mayton ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 21:43 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
А я с сей не ушёл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 21:59 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyMasterZiv, У гугловцев есть возможность закидать всех шапками (реализовать все необходимые им библиотеки самим). Так что может и отключают. Обычные разработчики - не могут себе это позволить. Кстати, интересно какой компилятор в Google обычно используют, или тоже пишут свой? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 01:02 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?любой код возвратаА с-программист обязан учитывать, что любая функция может выкинуть абсолютно любой код возврата, который непонятно как обрабатыватьНо только это не влияет на ход выполнения вашего кода. А с исключениями надо всегда учитывать, что следующая после вызова функции строка кода может и не выполниться. Абсолютно везде, где в коде с кодом возврата идет return, в коде с исключениями идет throw(), и наоборот, и следующая строчка не выполнится после любого из них. В любом случае необходимо сначала обработать ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 01:14 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
А я глубоко убежден что я не использую исключения именно потому что понимаю их :) Концепция простая, но излишне подверженная кривому кодированию. Это что вот значит? Ведь так можно по все, что угодно сказать. Циклы — концепция простая, но излишне подвержена кривому кодированию. Классы — ... Но подвержена излише кривому кодированию. Вон, Торвальдс так про весь С++ говорит. Есть языки где без исключений жить нельзя вообще (почти все функциональные например), но в С++ можно прекрасно жить без исключений. Чем с++ принципиально от них отличается? Чем тебе с++ не функциональный язык? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 01:54 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
MasterZivА я глубоко убежден что я не использую исключения именно потому что понимаю их :) Концепция простая, но излишне подверженная кривому кодированию. Это что вот значит? Ведь так можно по все, что угодно сказать. Циклы — концепция простая, но излишне подвержена кривому кодированию. Классы — ... Но подвержена излише кривому кодированию. Вон, Торвальдс так про весь С++ говорит.И я с ним согласен, поэтому предпочитаю простой C :) MasterZivЕсть языки где без исключений жить нельзя вообще (почти все функциональные например), но в С++ можно прекрасно жить без исключений. Чем с++ принципиально от них отличается? Чем тебе с++ не функциональный язык?Можно на С++ писать в функциональной парадигме. Но это вовсе не обязательно. Можно на С++ писать чисто имеративно. Но это вовсе не обязательно. Можно на С++ писать на чистом ООП. Но это вовсе не обязательно. Но вот то что все учебники по С++ пропагандируют жуткую смесь всех трех парадигм - это не только не обязательно, но еще и крыше-срывательно. Вообще, С++ мне напоминает классическую настольную D&D - можно отыгрывать любого персонажа в меру своей фантазии. Но хорошей игра будет только в том случае если ее ведет хороший dungeon master. Так же и с С++ - можно писать в любом стиле, но хороший проект получится только если есть жесткий лидер группы способный вести проект. И если лидер сказал: "выход из комнаты только на восток", то писать надо именно так - иначе game over и ищи новую работу. В других языках как-то больше порядка. Есть базовая парадигма, есть стандартный стиль оформления, все учебники следуют общим принципам... И только в С++ что ни учебник, то своя колокольня, что ни библиотека, то свой монастырь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 05:56 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто не так. Если например не выделилась память, а ты это не проверил через какой-то код возврата (да хоть тот же malloc на NULL), то первый же код, который эту память будет использовать, упадёт. Такие же случаи могут быть и с другими видами объектов и функциями.Это просто прекрасно, что сразу упадет. Гораздо хуже, когда внешне прекрасно все работает, но иногда выдает совершенно левые результаты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 07:05 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
любой код возвратаАбсолютно везде, где в коде с кодом возврата идет return, в коде с исключениями идет throw(), и наоборот, и следующая строчка не выполнится после любого из них. В любом случае необходимо сначала обработать ошибку.В вызывающем эту функцию коде не выполнится следующая строка, если функция выкинула исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 07:12 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?любой код возвратаАбсолютно везде, где в коде с кодом возврата идет return, в коде с исключениями идет throw(), и наоборот, и следующая строчка не выполнится после любого из них. В любом случае необходимо сначала обработать ошибку.В вызывающем эту функцию коде не выполнится следующая строка, если функция выкинула исключение. В вызывающем эту функцию коде обязательно надо проверить её код возврата, и если он содержит ошибку, то следующая строка не выполнится, т.к. обязательно делаем break, return, exit... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 12:17 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
? http://www.transl-gunsmoker.ru/2010/02/blog-post_11.html автор(Да, есть модели программирования типа RAII и транзакций, но вы редко сможете увидеть пример, который бы их использовал) Супер! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 13:41 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
любой код возврата, ок, возьмите пример из оригинального сообщения Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. теперь представьте, что функции вместо возврата кода ошибки кидают исключения и исправьте код :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 13:50 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Да, парни очень правильно рассуждают, но потом в самом-самом конце почему-то делают ровно противоположные к правильным выводы. Ну, на самом деле конечно же ни один из выводов "я буду использовать исключения" или "я не буду использовать исключения" не правильный или неправильный, это скорее вопрос идеологии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 14:01 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?любой код возврата, ок, возьмите пример из оригинального сообщения теперь представьте, что функции вместо возврата кода ошибки кидают исключения и исправьте код :) Пишется обертка над HANDLE которая 1) если хендл инвалидный кидает исключение при попытке его прочесть (operator HANDLE()) 2) если хендл валидный закрывает его в дестукторе. Итого код останется точно таким же. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 14:18 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyИтого код останется точно таким же. :) Даже сократится за счет ненужности CloseHandle :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 14:19 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?любой код возврата, ок, возьмите пример из оригинального сообщения Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. теперь представьте, что функции вместо возврата кода ошибки кидают исключения и исправьте код :) Во-первых эти функции не могут кидать исключения, т.к. это код на C, или по крайней мере в C-style, а не C++. Во-вторых этот код не верный, т.к. всегда возвращает true! И не смотря на то, что WinAPI писался для совместимости с C, на RAII и exceptions он в 100 раз более понятный и отлаживаемый - тут уже никак не перепутаешь и не забудешь вызовы CloseHandle/UnmapViewOfFile. В нормальном C++ коде все функции либо уже возвращали бы smart pointers с нужными делитерами, либо вообще все скрывали в конструкторе, как в std::fstream. Теперь приведите этот же код с кодами возврата: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 14:32 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky?любой код возврата, ок, возьмите пример из оригинального сообщения теперь представьте, что функции вместо возврата кода ошибки кидают исключения и исправьте код :) Пишется обертка над HANDLE которая 1) если хендл инвалидный кидает исключение при попытке его прочесть (operator HANDLE()) 2) если хендл валидный закрывает его в дестукторе. Итого код останется точно таким же. :) 1 даже не нужно, т.к. по его условию "функции вместо возврата кода ошибки кидают исключения" :) Но в Ture C++-Style библиотеке это вообще все не нужно, т.к. реализовано и сокрыто в библиотеке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 14:35 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
в Ture C++-Style библиотеке, Ну все же в вашем коде много синтаксического мусора. То что я предложил, оставляет код буквально таким же как привыкли си-шники, но при этом автоматически возникает обработка ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 14:44 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?любой код возврата, ок, возьмите пример из оригинального сообщения Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. теперь представьте, что функции вместо возврата кода ошибки кидают исключения и исправьте код :) Ну, в этом нет ничего сложного. Только необходимо провести подготовительную работу: - реализовать handle_guard Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. - обрамить winapi вызовы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. Ну а дальше собственно переписать код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 14:49 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyв Ture C++-Style библиотеке, Ну все же в вашем коде много синтаксического мусора. То что я предложил, оставляет код буквально таким же как привыкли си-шники, но при этом автоматически возникает обработка ошибок. Ну обертка над HANDLE могла бы в сумме занять чуть больше места, чем исходный код в рамках данного примера, а сторонник кодов возврата бы этого не понял :) Ну и для UnmapViewOfFile() пришлось бы все равно либо отдельную обертку делать, либо как у меня писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 14:50 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
в Ture C++-Style библиотеке, Ну естественно суммарный код будет больше, т.к. это должна быть отдельная библиотека, в которой все нужные фичи обернуты в безопасную форму. А если люди не понимают разницу между прикладным и библиотечным кодом, то им доказывать что либо бессмысленно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 14:57 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
В принципе можно ещё так упростить :) Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 15:05 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
можно ещё так упроститьВ принципе можно ещё так упростить :) Показательный пример мощи современного С++. Спасибо. Отличный пример. Мой же пример "дореволюционного подхода" явно многословен, хотя успешно позволял нам писать во времена VC6. Да, прогресс не остановить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 15:11 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
stuffy.reg...не обрабатывать исключения ? ... сама по себе обработка исключений - инструмент. юзать или не юзать, как юзать, где юзать - эти вопросы очень сильно вплетены в область решаемых задач, общим подходам программирования в данной конторе, архитектурному вопросу. помимо самого инструментария, при его применении необходимо решить кучу вспомогательных вопросов. как правило народ это либо не понимает(представляет как можно вытащить все плюсы :) не те плюсы), либо лениться, либо нет сил и средств на проработку этих вопросов. из своего опыта могу сказать, что глубоко проработанная концепция создания-ловли-обработки-разборки-диспетчирезации-делегации исключений _резко_ повышает надёжность всего продукта в целом. всё остальное - от лукавого. удачи вам (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 15:22 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Наверное исходник С++ бесполезно рассматривать в вакууме. Нужно какое-то code convention. Думаю это code convention и имел в виду PM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 15:39 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Ну понакидали кучу вариантов. Но, возвращаясь к изначальному вопросу, ни в одном из этих вариантов почему-то нет явной обработки исключений :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 16:31 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
а, не, в одном есть: Код: plaintext 1. 2. 3. и это ужас-ужас-ужас... так нельзя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 16:36 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?Ну понакидали кучу вариантов. Но, возвращаясь к изначальному вопросу, ни в одном из этих вариантов почему-то нет явной обработки исключений :) Так явная обработка не нужна. Точнее она нужна, но не в этом низкоуровневом коде. Пока не будет понимания что исключения не нужно обрабатывать тут же, вам так и будет казаться что от них одни проблемы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 16:58 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?а, не, в одном есть: Код: plaintext 1. 2. 3. и это ужас-ужас-ужас... так нельзя... По вашей ссылке всё ещё в разы хуже. В этом примере больше и не нужно, а у вас просто необоснованный страх перед неизвестным для вас механизмом исключений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 17:05 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Проблема в поддержке чужого кода. Ну вот есть некая программа, устанавливается как сервис, типа должна всегда работать, нельзя чтобы упала. Ну и вставили разработчики там "чтобы не упала" catch(...){}. Когда из-за утечки она начала кидать bad_alloc, перехватывать его и пытаться продолжать работать... да лучше бы она упала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 17:36 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?Проблема в поддержке чужого кода. Ну вот есть некая программа, устанавливается как сервис, типа должна всегда работать, нельзя чтобы упала. Ну и вставили разработчики там "чтобы не упала" catch(...){}. Когда из-за утечки она начала кидать bad_alloc, перехватывать его и пытаться продолжать работать... да лучше бы она упала. Чего вы там выдумываете? Приведите пример вашей правильной реализации на C++ этого примера с кодами возврата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 17:41 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Щас читаю Scala Хорстмана. Интересно он там про checked Exceptions написал. Чуть позже отквотирую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 17:45 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Приведите примерЧего вы там выдумываете? Приведите пример вашей правильной реализации на C++ этого примера с кодами возврата. Да причем тут коды возврата? Нельзя делать catch(...) без перевыбрасывания исключения. То есть эту конструкцию можно применять только в контексте Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 17:53 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Искать баги в чужом коде, использующем исключения, сложнее, чем в коде, не использующем исключения... Это кто-то будет оспаривать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 17:57 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
[quot MasterZiv]Anatoly MoskovskyПро отключенные исключения. Так если гугловцы не используют исключения, они должны их выключать при сборке, либо быть готовым ко всему, что у них записано в CONS. вы непоняли что написано - они не используют исключения для управления логикой приложения как это сделано в жабе и шарпе. И это правильно - ибо при исключении в винде происходит first chance exception и отлаживать потом такое приложение в windbg становится невозможным из-за обилия исключений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 18:09 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?Искать баги в чужом коде, использующем исключения, сложнее, чем в коде, не использующем исключения... Это кто-то будет оспаривать? В вашем коде да. ?Приведите примерЧего вы там выдумываете? Приведите пример вашей правильной реализации на C++ этого примера с кодами возврата. Да причем тут коды возврата? Нельзя делать catch(...) без перевыбрасывания исключения . То есть эту конструкцию можно применять только в контексте Код: plaintext 1. И что же в моем примере должен делать rollback() и почему я не могу вернуться по флагу(коду) возврата return false - неужели использовать код возврата это так ужасно? Вы свой пример кода приведите и вам сразу станет очевидно какую чушь вы несете :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 18:32 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Lepsikвы непоняли что написано - они не используют исключения для управления логикой приложения как это сделано в жабе и шарпе. Думаю, это вы не поняли. Исключения как концепция не предполагает вообще управление логикой. В джаве и шарпе тоже никто не использует исключения для управления логикой. Вернее использовать-то их можно (как и в С++), но те, кто используют - это те же кто потом говорит, что исключения хуже чем коды возврата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2013, 01:32 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
?Искать баги в чужом коде, использующем исключения, сложнее, чем в коде, не использующем исключения... Это кто-то будет оспаривать? Да. Оспариваем. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2013, 01:32 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyLepsikвы непоняли что написано - они не используют исключения для управления логикой приложения как это сделано в жабе и шарпе. Думаю, это вы не поняли. Исключения как концепция не предполагает вообще управление логикой. похоже что английский для вас не родной, но я таки дам вам статью где таки да критикуют это - http://www.ibm.com/developerworks/java/library/j-jtp05254/index.html И это часть концепции девелопмента в жабе и С# даже в крупных компаниях когда кидают исключение не только вместо кода ошибки но для управления логики. пример - catching NoSuchElementException when calling Iterator.next() instead of first checking Iterator.hasNext() и такого кода я за годы существования C# и java я разгреб тонны и вы будете мне сказки рассказывать вот вам пример из учебника по жабе Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. https://today.java.net/pub/a/today/2003/12/04/exceptions.html Пример для С++: MSSQL 2000 под отладчиком сыпет тонны first chance exceptions по любому запросу и при старте, к счастью, начиная с MSSQL2005 они этот порочный путь оставили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2013, 07:25 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky?Искать баги в чужом коде, использующем исключения, сложнее, чем в коде, не использующем исключения... Это кто-то будет оспаривать? Да. Оспариваем. :) Я бы тоже поспорил. С исключениями код проще, легче читается, проще понимается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2013, 12:10 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Lepsik, авторИ это часть концепции девелопмента в жабе и С# даже в крупных компаниях когда кидают исключение не только вместо кода ошибки но для управления логики. Использование исключений для реализации логики -- это на столько плохо, что вообще не обсуждается. С этим никто не спорит. Но там было чётко написано (перевожу на русский) -- "Мы не используем исключения". Не используем -- значит, как минимум, они не кидаются, не обрабатываются и не ловятся. Если расширить толкование, это может значить три вещи (как я понимаю). Они не используют исключения вообще, не включают в компиляторе поддержку исключений, а также не используют библиотеки, которые используют исключения. Они не используют исключения в своём коде, но в компиляторе исключения включены и библиотеки, использующие исключения, используются. (странный случай). Они не используют исключения в своём коде, в компиляторе исключения включены и библиотеки, использующие исключения, искпользуются. В каждом приложении наверху пишется стек обработки исключений, они ловятся и как-то обрабатываются. На самом деле в реальности либо 1, либо 3, 2-й сценарий нереальный. Ну а если они ловят искл. наверху, то должны будут ловить иногда и в других местах, локальных. Это уже неиспользванием исключений не назвать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2013, 12:19 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
LepsikNoSuchElementException IllegalArgumentException Это два примера, когда как раз к логике исключения не имеют отношения. Это обычная защита от дурака. В первом случае дурак не проверил что итератор завершен и продолжает его использовать, а во втором - передал в функцию левые аргументы. Это не элементы логики, а именно исключительная ситуация. Причем заметьте, что сама джава не заставляет вас использовать например NoSuchElementException для проверки итератора - у вас есть hasMoreElements hasNext Это кто-то слишком умный у себя решил вместо if применить catch, а вы почему-то именно к джаве претензии предъявляте. Lepsikдаже в крупных компаниях В крупных компаниях процент дураков такой же как и в мелких. А абсолютном значении - их гораздо больше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2013, 12:54 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
это зависит от специфики проекта. Код, откомпилированный без поддержки исключений, более компактен. Если это embedded-задачи, то там это может быть важно. В этом случае их нельзя ни бросать, ни обрабатывать. Может, например, у них в планах шить код в железку низкоресурсную, поэтому они заблаговременно к этому готовятся. что касается обычных задач, где ресурсов достаточно... Я вот замечал, что даже в java даже в распространенных либах иногда встречаются "лишние" обработки исключений, которые только мешают. Может у них там разработка так поставлена, что вам просто это делать не надо. Исключения обрабатываются на том уровне, где известно что с ними делать. Но некоторые особо упоротые везде понаставляют try-catch c последующим rethrow и потом сиди их выковыривай. я бы на вашем месте спроил у тимлида че это он так. Наверняка на это есть причина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2013, 13:41 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
chabapok...embedded-задачи, то там... ...Исключения обрабатываются на том уровне, где известно что с ними делать. Но некоторые особо упоротые везде понаставляют try-catch c последующим rethrow и потом сиди их выковыривай..... в embedded - редко юзаются плюсы. как правило си и азм. само использования плюсов - не всегда там целесообразно. но если юзается - то имхо не юзать эксепшены - глупо. как уже прозвучало - с ними проще, читабельней, надёжней. вы апсолютно правы по поводу где обрабатываются эксепшены....бла-бла-бла... но как я уже сказал выше - это уже идеология, архитектура. а сами эксепшены - это механизм, инструмент. можно знать про нюансы применяемого инструмента, можно не знать - и утверждать, что микроскоп фиговый инструмент, т.к. гвозди им забиваемым гнутся в 70% случаях. (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2013, 16:32 |
|
||
|
Обработка исключений отсутствует
|
|||
|---|---|---|---|
|
#18+
Иногда в деструкторах хочется совершать действия не вызывающие обратной связи. Ну толкнуть .close для всех объектов connection, files, handles e.t.c. Что там он выбросит- пофиг. Это уже не важно. Это завершающие действия, фидбэк по которым неинтересен. Закрыт хендл и леший с ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2013, 18:47 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2019984]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
105ms |
get tp. blocked users: |
2ms |
| others: | 289ms |
| total: | 491ms |

| 0 / 0 |
