LINUX.ORG.RU

Расскажите о философии их использования

 ,


4

5

Уже много дней пишу на C++, но так сложилось, что в проектах, в которых я участвую, исключения не используются.

На днях задумался о том, чтобы протестировать их в одном из своих собственных проектов. Перед этим хотелось бы почитать какие-нибудь умные буквы о том, почему исключения - это хорошо.

Приветствуются ссылки на статьи на русском и английском языках.

Так же можете оставлять свое собственное мнение о практике и философии использования исключений в с++ коде.

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)
Ответ на: комментарий от andreyu

«unused variable err»

И -Werror, да?

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

ЕМНИП, в Doom3 есть исключения.

Тут виноват тот, кто решил, что исключения помогут избежать ошибок.

А кто именно так решил и почему ты считаешь, что он решил именно так?

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

ЕМНИП, в Doom3 есть исключения.

Что за примеры? :) Это вообще не игра, так как Кармак не читал рекомендации парней из playstation. Он же ламер. :)

anonymous
()
Ответ на: комментарий от anonymous

Кармак не читал рекомендации парней из playstation. Он же ламер. :)

А, да. Вечно забываю - Кармака же модно считать лохом %) Гугл, правда, подсказывает, что Unreal Engine тоже использует исключения. Мля, мы бредем по колено в ламерах!!11

tailgunner ★★★★★
()
Ответ на: комментарий от andreyu

аутопоинтер кривой и deprecated, а раскручивать 100500 кодов возврата задолбаешься, да и читабельность падает до нуля.

Gorthauer ★★★★★
()
Ответ на: комментарий от anonymous

Ради каких-то кривых gкодов, где еще и стандарта нормального нет, точнее его никто не соблюдает?

Gorthauer ★★★★★
()
Ответ на: комментарий от Gorthauer

аутопоинтер кривой и deprecated,

Ясное дело надо умные указатели из C++11 использовать, в плане обработки исключений это ничего не меняет.

Begemoth ★★★★★
()
Ответ на: комментарий от quiet_readonly

Впрочем, для php-шников это типично.

у тебя сломан libastral, откатись.

Ты совершенно не в теме, чувак. Прежде всего хочу заметить, что код не является аналогией сишных высеров повыше, Это просто пример использования методики. Прикол RetRef в том, что он привязан к автоматической памяти и если в друг произойдёт ошибка деструктор RetRef все почистит. И если ты всё ещё задаёшь вопрос как он это сделает, я отвечаю - легко. Код для его реализации аналогичен unique_ptr с кастомным деаллокатором. Достаточно понимать, что деаллокатор может быть использован не только для деаллокации, а и для деинициализации. Кури raii короче.

Да и спор вообще говоря дебильный. Кто-то спрашивает - зачем использовать исключения, я отвечаю - затем, что бы меньше писать кода. Всё ясно?

nanoolinux ★★★★
()
Ответ на: комментарий от anonymous

Никак.

Тогда какой профит от исключений?

Пользователю совершенно не важно, как там внутри обрабатываются ошибки.

Именно, но пример макса показывает, что толку от них пользователю нет никакого.

Поэтому, меня и удивил ваш пример никчемности исключений в 3d максе.

Почему удивил? Потому, что этот пример показывает бесполезность исключений?

andreyu ★★★★★
()
Ответ на: комментарий от i-rinat

Не читал, стало быть. Там меньше одной страницы текста.

Статью не читал. Я давал комментарий на «полезность» исключений в этом топике.
Впрочем, вы тоже не читали статьи от разработчиков для консолей.

andreyu ★★★★★
()
Ответ на: комментарий от tailgunner

И -Werror, да?

Почему бы и нет?

ЕМНИП, в Doom3 есть исключения.

Тоже мне пример. Кармак сам говорит, что плюсы он не знает и использует их как попало.

Тут виноват тот, кто решил, что исключения помогут избежать ошибок.

А кто именно так решил и почему ты считаешь, что он решил именно так?

Может я чего то не понял в этом топике, тогда поясните мне полезность исключений. Я вижу только одни минусы, ну и дань моде и энтерпрайзу.

andreyu ★★★★★
()
Ответ на: комментарий от anonymous

Это вообще не игра,

Да, игра действительно говно.

так как Кармак не читал рекомендации парней из playstation. Он же ламер. :)

Он еще и про плюсы мало читал и говорит, что очень плохо их знает.

andreyu ★★★★★
()
Ответ на: комментарий от tailgunner

А, да. Вечно забываю - Кармака же модно считать лохом %)

Кем принято его считать лохом? Он далеко не лох, но и не знаток плюсов.

andreyu ★★★★★
()
Ответ на: комментарий от Gorthauer

аутопоинтер кривой и deprecated,

Не аутопоинтером единым живы плюсы.

а раскручивать 100500 кодов возврата задолбаешься, да и читабельность падает до нуля.

Ну если наговнокодить так, что нужно раскручивать 100500 кодов возврата, то пользуйтесь исключениями. Это модно, это надежно.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Кармак сам говорит, что плюсы он не знает и использует их как попало.

4.2

поясните мне полезность исключений

Возможность четкого разделения ошибочного и не-ошибочного путей исполнения; ясность кода, обеспечиваемая этим.

Я вижу только одни минусы,

Пока ты не привел ни одного (нет, пример с 3d studio max не в счет).

ну и дань моде

Этой фишке 20 лет в Си++ и 40 вообще.

tailgunner ★★★★★
()
Ответ на: комментарий от andreyu

В любом рекурсивном парсере придется это дело раскручивать, а если там еще и множестов модулей юзается, то вообще весело при вызове каждого подмодуля писать проверялку его на код возврата и если ошибка, то делать самому возврат. Или есть идеи как этого избежать? В любом случае мне придется или руками проверять нет ли чего в кодах возврата или же оставить эту заботу на компилятор и использовать исключения. А не таскать с собой коды возврата в каждую функцию каждого модуля в парсере. Проще разок швырнуть исключение и поймать его в главном методе и написать, что отпарсить этот файл невозможно, чем 100500 лишних проверок вписывать.

Gorthauer ★★★★★
()
Ответ на: комментарий от andreyu

Статью не читал.

Классика. Этой концепции уже 55-й год пошёл :)

Впрочем, вы тоже не читали статьи от разработчиков для консолей.

Во-первых, я дал ссылку, а ты нет. Во-вторых, читал. В-третьих, покажи свой код, если не трусишь.

i-rinat ★★★★★
()
Ответ на: комментарий от andreyu

Тогда какой профит от исключений?

Профит имеет программист, который может писать понятный и легко поддерживаемый код.

Именно, но пример макса показывает, что толку от них пользователю нет никакого.

Я уже задавал этот вопрос: Вам бы понравилось больше, если бы он ничего не написал? Плохо написать программу можно как с исключениями, так и без. :)

Почему удивил? Потому, что этот пример показывает бесполезность исключений?

Этот пример показывает бесполезность исключений в конкретной 3d studio, а не вообще исключений. :)

anonymous
()
Ответ на: комментарий от tailgunner

4.2

Че, в гугле забанили?

Возможность четкого разделения ошибочного и не-ошибочного путей исполнения; ясность кода, обеспечиваемая этим.

А с кодом возврата четкости нет?
Ясности кода тоже нет?

Пока ты не привел ни одного (нет, пример с 3d studio max не в счет).

Я привел, вы не приняли. Какой мне резон вас уговаривать? Нравится говно - жуйте его, я не против.

Этой фишке 20 лет в Си++ и 40 вообще.

Да хоть тысяча лет. Ущербности исключений это не отнимает.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Я вижу только одни минусы, ну и дань моде и энтерпрайзу.

Знаешь почему? Потому, что ты о исключениях знаешь по рекомендациям ребят из playstation. Своего опыта у тебя нет. А вот если бы ты сам сел и подумал, какие у них есть плюсы, какие минусы и как их использовать, что бы получать от них профит, тогда с тобой было бы интересно поговорить. А пока одни слова: мне пацан во дворе рассказывал, у него бабушка работает уборщицей в Google, так вот ее сменщица, как-то слышала, что разносчики кофе, говорили, что программисты гугла не используют исключения. Поэтому исключения это костыль, и использовать их нельзя. :)

anonymous
()
Ответ на: комментарий от Gorthauer

чем 100500 лишних проверок вписывать.

Ну какие 100500 проверок, если вы говорите о рекурсии? Код ошибки или параметром метода, или кодом возврата. Понятно, что глубоко из рекурсии проще вывалиться по исключению, избегая однообразной проверки при раскрутке. Но это частный случай, к геймдеву имеющий очень далекое отношение.
Впрочем, страницу назад, кто то приводил правильное решение и для этого случая.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Че, в гугле забанили?

Нет. А тебя?

А с кодом возврата четкости нет?

А с кодом возврата в лучшем случае лапша из goto для «эмуляции exceptions в Си».

Нравится говно - жуйте его, я не против.

Я бы сказал, что говно нравится тебе.

tailgunner ★★★★★
()
Ответ на: комментарий от i-rinat

Во-первых, я дал ссылку, а ты нет.

Ну поищите в гугле по «почему исключения зло».

Во-вторых, читал.

Там, где вы читали, утверждают, что исключения полезны?

В-третьих, покажи свой код, если не трусишь.

Не нужно меня брать на слабо. Кусок кода вам ничего не даст, а большего я вам давать не собираюсь. Но поверьте, в моем коде нет места исключениям.

andreyu ★★★★★
()
Ответ на: комментарий от nanoolinux

Потому что-ты смел только тогда, когда ты анонимус. Свободен.

Лол, что? Если ты не заметил, мои анонимные посты тоже не трут. Я же говорю, ты невменяем.

anonymous
()
Ответ на: комментарий от anonymous

Я уже задавал этот вопрос: Вам бы понравилось больше, если бы он ничего не написал? Плохо написать программу можно как с исключениями, так и без. :)

А так исключения для того, что бы выдать пользователю сообщение, что его работа была сделана зря? А без исключений подобного сделать нельзя?

Этот пример показывает бесполезность исключений в конкретной 3d studio, а не вообще исключений. :)

Приложения, использующие исключения, которые я видел, ничего полезного при падении не делали. Программист полагается на исключения, вместо того, что бы протестировать свое приложение.

andreyu ★★★★★
()
Ответ на: комментарий от anonymous

Знаешь почему? Потому, что ты о исключениях знаешь по рекомендациям ребят из playstation. Своего опыта у тебя нет. А вот если бы ты сам сел и подумал, какие у них есть плюсы, какие минусы и как их использовать, что бы получать от них профит, тогда с тобой было бы интересно поговорить. А пока одни слова: мне пацан во дворе рассказывал, у него бабушка работает уборщицей в Google, так вот ее сменщица, как-то слышала, что разносчики кофе, говорили, что программисты гугла не используют исключения. Поэтому исключения это костыль, и использовать их нельзя. :)

Эту херню вам баба Ванга нашептала?

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Ну поищите в гугле

То есть ты сам не знаешь.

Там, где вы читали, утверждают, что исключения полезны?

Да. Я давал ссылку. По ней авторы добились ускорения при использовании исключений.

Не нужно меня брать на слабо.

Так я уже.

Кусок кода вам ничего не даст, а большего я вам давать не собираюсь.

Почему обязательно мне? Здесь много людей, и все хотят растерзать.

Но поверьте, в моем коде нет места исключениям.

Ты точно на C++ пишешь? Совсем без использования стандартной библиотеки? Даже файлы не открываешь?

i-rinat ★★★★★
()
Ответ на: комментарий от andreyu

Приложения, использующие исключения, которые я видел, ничего полезного при падении не делали. Программист полагается на исключения, вместо того, что бы протестировать свое приложение.

Ключевая фраза: которые я видел. Ты суслика видишь? А он есть. :)

anonymous
()
Ответ на: комментарий от tailgunner

Нет. А тебя?

Меня нет, потому я знаю, что сказал Кармак про свое знание плюсов. Потому исключения в его коде для меня не показатель.

А с кодом возврата в лучшем случае лапша из goto для «эмуляции exceptions в Си».

Ну вот видите, ваш мозг совсем заплыл от исключений. Думать вы уже не способны.

Я бы сказал, что говно нравится тебе.

Да понятно, что так бы вы и сказали. Что вам еще остается то.

p.s. Вас часом Reset не покусал?

andreyu ★★★★★
()
Ответ на: комментарий от i-rinat

Даже файлы не открываешь?

Со слезами. :)

anonymous
()
Ответ на: комментарий от anonymous

Ключевая фраза: которые я видел. Ты суслика видишь? А он есть. :)

Вот, только эту фразу я должен был сказать на заявление, что исключение сила. Один мой пример, опроверг бы это заявление.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

я знаю, что сказал Кармак про свое знание плюсов

Я тоже. И он не говорил «что плюсы он не знает и использует их как попало».

А с кодом возврата в лучшем случае лапша из goto для «эмуляции exceptions в Си».

Ну вот видите, ваш мозг совсем заплыл от исключений.

Я последние 12 лет пишу на чистом Си. Если мой мозг чем-то и заплыл, то это goto-лапша для обработки ошибок.

Нравится говно - жуйте его, я не против.

Я бы сказал, что говно нравится тебе.

Да понятно, что так бы вы и сказали

А ты ожидал другого ответа на «жуйте говно»? Напрасно, я стараюсь отвечать собеседнику в его же тоне.

Вас часом Reset не покусал?

Резет, при всем его вендузятном троллинге, грамотный специалист.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)

Конечно, зачем нужны исключения, когда есть bool? :D

bool function();
bool doSomething();

main() {

    if (!function()) return 0;
    else if (!doSomething()) return 0;

return 0;

}
puding
()
Ответ на: комментарий от i-rinat

Ну поищите в гугле

То есть ты сам не знаешь.

У вас логика хромает. Попробую вам пояснить на пальцах - я ссылки наизусть не знаю. Но умею пользоваться поисковой системой. Обучать вас этому полезному навыку я не имею никакого желания.

Да. Я давал ссылку. По ней авторы добились ускорения при использовании исключений.

О, показатель. Сча вставлю везде обработчики исключений и мои приложения ускорятся.
Кстати, а какая там формула? Типа, 20 обработчиков - ускорение на 30%, 100 обработчиков - ускорение на 100500%.

Не нужно меня брать на слабо.

Так я уже.

Я так и подумал.

Почему обязательно мне? Здесь много людей, и все хотят растерзать.

Все эти люди вам так и сказали? :)
От пионеры, любят стадом ходить.
Ладно, вот кусок кода:

printf(«Exeptions in C++ is bullshit\n»);

Ни одного исключения не было выброшено, ни один обработчик не был использован.

Ты точно на C++ пишешь? Совсем без использования стандартной библиотеки? Даже файлы не открываешь?

Использовать исключения и наличие исключений в stl - несколько разные вещи, не?

И с каких это пор open() или fopen() стал бросать исключения? Какое он вообще имеет отношение к плюсам?

andreyu ★★★★★
()
Ответ на: комментарий от tailgunner

Я тоже. И он не говорил «что плюсы он не знает и использует их как попало».

Видимо я не правильно понял смысл его слов. А он как бы говорит, «смотрите какие прикольные исключения, используйте их»?

Я последние 12 лет пишу на чистом Си.

Но утверждаете, что исключения полезны. Ну че, аргумент.

Если мой мозг чем-то и заплыл, то это goto-лапша для обработки ошибок.

Вы хотите развести еще один флейм на тему использования goto?

А ты ожидал другого ответа на «жуйте говно»? Напрасно, я стараюсь отвечать собеседнику в его же тоне.

Я назвал исключения говном (тут я погорячился, свою нишу они нашли). Вас это задело? Тогда приношу свои извинения.

Резет, при всем его вендузятном троллинге, грамотный специалист.

Да, таковым я его и считал еще год-другой назад. Пока он не заболел (или что там с ним случилось).

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

А то что парсер это не только рекурсивный вызов метода parse до тебя не доходит? И для каждого метода придется делать костыли из кодов возврата. А в каждом вызываемом методе делать проверку этого самого кода.

Gorthauer ★★★★★
()
Ответ на: комментарий от anonymous

Без последнего return 0; пример выглядел как-то «по быдлокодерски» :D

puding
()
Ответ на: комментарий от andreyu

А он как бы говорит, «смотрите какие прикольные исключения, используйте их»?

Нет, он как бы говорит «I just started writing C++ without any proper study of usage and idiom», но не более. Результат оценен другим Си++-прогером в статье The Exceptional Beauty of Doom 3’s Source Code

Я последние 12 лет пишу на чистом Си.

Но утверждаете, что исключения полезны.

Именно. Потому что до того я несколько лет писал на Си++, немного на Яве, и лет 10 одновременно с Си пишу на Питоне. Так что да, я знаю, что исключения полезны, и мне их не хватает.

Вы хотите развести еще один флейм на тему использования goto?

Нет. В Си использование goto - лучший выход, но нужно понимать, что это только имитация нормального механизма обработки ошибок.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от Gorthauer

А то что парсер это не только рекурсивный вызов метода parse до тебя не доходит? И для каждого метода придется делать костыли из кодов возврата. А в каждом вызываемом методе делать проверку этого самого кода.

Ну покажите, как вам тут помогут исключения?

andreyu ★★★★★
()
Ответ на: комментарий от tailgunner

Результат оценен другим Си++-прогером в статье The Exceptional Beauty of Doom 3’s Source Code

О да, помню я эту статью, перлы вроде:

I personally don't like the use of auto, I think it makes the code easier to write but harder to read.

изрядно позабавили.

Вообще, сложилось такое впечатление, что он просто фанбой Кармака.

anonymous
()
Ответ на: комментарий от tailgunner

Нет, он как бы говорит «I just started writing C++ without any proper study of usage and idiom», но не более. Результат оценен другим Си++-прогером в статье The Exceptional Beauty of Doom 3’s Source Code

И в этой статье он рассказывает о коммента, констах, именах методов. Но не припомню, где он говорит о полезности исключений.

Именно. Потому что до того я несколько писал на Си++, немного на Яве, и лет 10 одновременно с Си пишу на Питоне. Так что да, я знаю, что исключения полезны, и мне их не хватает.

Ну что тут скажешь, используйте исключения, коль вам они полезны.

Нет. В Си использование goto - лучший выход, но нужно понимать,

Все же пытаетесь развести флейм на эту тему. Я пас.

что это только имитация нормального механизма обработки ошибок.

А зачем нужно имитировать исключения?

andreyu ★★★★★
()
Ответ на: комментарий от anonymous

Вообще, сложилось такое впечатление, что он просто фанбой Кармака.

Ага, практически аналогичное мнение сложилось и у меня.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.