metaclass: (Default)
[personal profile] metaclass
Хорошо ли в C++ программе делать логику на исключениях?
Я ща втыкаю в одну опенсорсную СУБД в продакшене отладчиком и вижу что там на каждый запрос валится стопицот крестиковых исключений, и не понимаю, это нормально или нет.

Date: 2014-09-29 09:02 am (UTC)
From: [identity profile] trueblacker.livejournal.com
нехорошо

Date: 2014-09-29 09:03 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
но нормально (и так у них всё!)

Date: 2014-09-29 09:04 am (UTC)
From: [identity profile] tiendil.livejournal.com
Нормальность скорее определяется уместностью конкретных случаев использования исключений, чем языком.

Date: 2014-09-29 09:05 am (UTC)
From: [identity profile] aamonster.livejournal.com
По мне - очень не айс. Как минимум, неудобно отлаживаться.
Лучше их оставлять для по настоящему тяжёлых случаев.

Да и зубры то же самое рекомендуют...

Date: 2014-09-29 09:06 am (UTC)
From: [identity profile] bydlorus.livejournal.com
Для вин-программистов это норма. Некоторые делают логику на разыменовании неинициализированного указателя. Например, если у юзера нет прав, объект не создаётся, происходит обращение по адресу NULL, возникает Access Violation, SEH преобразует это в C++ исключение, оно ловится и обрабатывается как "нет прав доступа", на это дело даже интеграционный тест написан.

Поэтому мы под линукс эмулируем этот seh (через сигналы и дизассемблирование инструкций по адресу в стеке), так, чтобы тест отрабатывал.

Date: 2014-09-29 09:20 am (UTC)
From: [identity profile] aamonster.livejournal.com
Страшные вещи вы рассказываете... Первая мысль "а вот у нас на маке можно вызывать методы у нулевого указателя!", вторая "блин, я ж писал на винде - никто так не делал, на ноль проверяли явно, и это задалбывало"

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-09-29 09:26 am (UTC) - Expand

(no subject)

From: [identity profile] aamonster.livejournal.com - Date: 2014-09-29 09:45 am (UTC) - Expand

Date: 2014-09-29 10:16 am (UTC)
From: [identity profile] vp.livejournal.com
Нифига ж себе.

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-09-29 10:20 am (UTC) - Expand

Date: 2014-09-29 11:41 am (UTC)
From: [identity profile] ext_1684112 (from livejournal.com)
А почему нельзя просто выбросить специализированное исключение?

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-09-29 11:44 am (UTC) - Expand

(no subject)

From: [identity profile] ext_1684112 - Date: 2014-09-29 11:53 am (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-09-29 12:10 pm (UTC) - Expand

Date: 2014-09-29 12:07 pm (UTC)
develop7: (dero)
From: [personal profile] develop7
хуясе let it fail на сегфолтах

Date: 2014-09-29 12:53 pm (UTC)
From: [identity profile] naartir.livejournal.com
Смелые люди не боятся UB?
Edited Date: 2014-09-29 12:56 pm (UTC)

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-09-29 12:56 pm (UTC) - Expand

(no subject)

From: [identity profile] naartir.livejournal.com - Date: 2014-09-29 01:15 pm (UTC) - Expand

(no subject)

From: [identity profile] berezovsky.livejournal.com - Date: 2014-09-29 01:17 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-09-29 01:17 pm (UTC) - Expand

(no subject)

From: [identity profile] naartir.livejournal.com - Date: 2014-09-29 01:18 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-09-29 01:20 pm (UTC) - Expand

(no subject)

From: [identity profile] naartir.livejournal.com - Date: 2014-09-29 01:22 pm (UTC) - Expand

Date: 2014-09-30 06:56 am (UTC)
From: [identity profile] worm-ii.livejournal.com
Поскольку "Access Violation" переводится как "Нарушение прав доступа", то тут даже ловить и преобразовывать исключение не надо :-)

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-09-30 06:59 am (UTC) - Expand

Date: 2014-09-29 09:44 am (UTC)
From: [personal profile] alll
Смотря чего логику. Если логику обработки нештатных ситуаций, то скорее хорошо. Если бизнес-логику, то скорее нехорошо.

Date: 2014-09-29 10:31 am (UTC)
From: [identity profile] metaclass.livejournal.com
Запросы отрабатывают корректно, вроде нештатной ситуации не наблюдается.

(no subject)

From: [personal profile] alll - Date: 2014-09-29 10:56 am (UTC) - Expand

(no subject)

From: [identity profile] falcrum.livejournal.com - Date: 2014-09-29 12:18 pm (UTC) - Expand

(no subject)

From: [identity profile] vaddimka.livejournal.com - Date: 2014-09-29 02:26 pm (UTC) - Expand

Date: 2014-09-29 09:45 am (UTC)
From: [identity profile] cross-join.livejournal.com
Для систем класса СУБД ненормально, лишние затраты, время и т.д.
Для ООП в целом - стандартный подход, исключение - это способ послать сообщение.
Отсюда вывод, для написания СУБД надо уметь оба подхода.

Date: 2014-09-29 11:57 am (UTC)
From: [identity profile] vit-r.livejournal.com
"Старнартный подход" - это потому, что "у нас в коллективе такие идиоты, что проверить возвращаемое значение функции не могут"

Сообщения - это сообщения.

(no subject)

From: [identity profile] cross-join.livejournal.com - Date: 2014-09-29 12:03 pm (UTC) - Expand

(no subject)

From: [identity profile] maxdz.livejournal.com - Date: 2014-09-29 01:01 pm (UTC) - Expand

(no subject)

From: [identity profile] cross-join.livejournal.com - Date: 2014-09-29 01:31 pm (UTC) - Expand

(no subject)

From: [identity profile] maxdz.livejournal.com - Date: 2014-09-29 01:42 pm (UTC) - Expand

(no subject)

From: [identity profile] cross-join.livejournal.com - Date: 2014-09-29 01:54 pm (UTC) - Expand

(no subject)

From: [identity profile] maxdz.livejournal.com - Date: 2014-09-29 02:03 pm (UTC) - Expand

(no subject)

From: [identity profile] cross-join.livejournal.com - Date: 2014-09-29 02:10 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-09-29 02:12 pm (UTC) - Expand

(no subject)

From: [identity profile] maxdz.livejournal.com - Date: 2014-09-29 02:24 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-09-29 01:17 pm (UTC) - Expand

(no subject)

From: [identity profile] cross-join.livejournal.com - Date: 2014-09-29 01:27 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-09-29 01:44 pm (UTC) - Expand

(no subject)

From: [identity profile] cross-join.livejournal.com - Date: 2014-09-29 01:56 pm (UTC) - Expand

Date: 2014-09-29 09:49 am (UTC)
From: [identity profile] dr-cha0s.livejournal.com
Это считается грехом. Однако, в корбе иногда нет иной возможности, кроме как бросать эксепшены типа NotFoundError.

Date: 2014-09-29 10:15 am (UTC)
From: [identity profile] sbj-ss.livejournal.com
Ребе, вон NTFS на SEH работает - и ничего… %)

Date: 2014-09-29 10:17 am (UTC)
From: [identity profile] justy-tylor.livejournal.com
Смотря для чего.

Исключения надо бросать, когда обнаружено несоответствие требованиям и надо грохнуть задачу (например, загрузка файла), отметив это в родительской задаче (например, импорт пользовательских настроек). При этом, в контексте требований родительской задачи всё может быть ок - настроек из хрома не нашли, настройки из оперы предложили применить.

Если _можно_ и _удобно_ представить рассматриваемую ситуацию в виде задачи и требований, то исключения годный инструмент. Иначе - ошибка проектирования.

Date: 2014-09-29 10:36 am (UTC)
From: [identity profile] maxdz.livejournal.com
>Хорошо ли в C++ программе делать логику на исключениях?

Нехорошо.

Да и вообще, опен-соурсные субд лучше бы писать на C (без плюсов).

Date: 2014-09-29 10:59 am (UTC)
From: [personal profile] alll
Переформулируя вопрос в терминах лучше-бы-С: хорошо ли в программе делать логику на лонгджампах? :)

(no subject)

From: [identity profile] maxdz.livejournal.com - Date: 2014-09-29 11:06 am (UTC) - Expand

(no subject)

From: [personal profile] alll - Date: 2014-09-29 12:07 pm (UTC) - Expand

Date: 2014-09-29 11:10 am (UTC)
From: [identity profile] psilogic.livejournal.com
Выброс исключения (throw) - штука сравнительно медленная, поэтому для штатной работы однозначно нехорошо. Опять же, отлаживать в Visual Studio неудобно: теряет смысл брекпоинт на исключение заданного типа, а Output-окно засирается ненужной инфой.

А вот для обработки ошибок, напротив, штука полезная - сильно сокращает объем текста, делает его обозримым, позволяет брякать на определенную ошибку без потери времени на пошаговую (правда вынуждает дополнительно заморачиваться с прикапыванием всего аллоцированного в объектах с деструкторами, но даже и это в конечном счете окупается)

Date: 2014-09-29 11:19 am (UTC)
From: [identity profile] veter-r-r.livejournal.com
А есть языки, в которых логику на исключениях делать хорошо?

(no subject)

From: [identity profile] veter-r-r.livejournal.com - Date: 2014-09-29 11:38 am (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2014-09-29 06:12 pm (UTC) - Expand

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2014-09-30 01:33 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2014-10-07 07:56 am (UTC) - Expand

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2014-10-07 08:00 am (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2014-10-08 10:31 am (UTC) - Expand

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2014-09-30 01:35 pm (UTC) - Expand

Date: 2014-09-29 11:58 am (UTC)
From: [identity profile] vit-r.livejournal.com
Люди явно учились по Яве.

Date: 2014-09-29 01:48 pm (UTC)
From: [identity profile] ext_1684112 (from livejournal.com)
С явы ни один человек по доброй воле на С++ не перелезет.

И вдобавок, в яве исключение тоже является дорогой операцией.

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-09-29 02:10 pm (UTC) - Expand

(no subject)

From: [identity profile] maxdz.livejournal.com - Date: 2014-09-29 02:13 pm (UTC) - Expand

(no subject)

From: [identity profile] ext_1684112 - Date: 2014-09-29 02:19 pm (UTC) - Expand

(no subject)

From: [identity profile] maxdz.livejournal.com - Date: 2014-09-29 02:28 pm (UTC) - Expand

(no subject)

From: [identity profile] ynot.livejournal.com - Date: 2014-09-29 08:22 pm (UTC) - Expand

(no subject)

From: [identity profile] volodymir-k.livejournal.com - Date: 2014-09-29 05:38 pm (UTC) - Expand

Date: 2014-10-01 05:55 pm (UTC)
From: [identity profile] ivanzoid.livejournal.com
ГРЕШНОВАТО

Date: 2014-10-02 11:41 am (UTC)
From: [personal profile] leotsarev
Ребе, простите, что к вам обращаемся.
Необходимо срочно (вчера) найти телефон родственника в Белорусии по адресу и фамилии.
В интернетах пишут вроде:
Одно дело с ныне проживающими жителями Беларуси, т.е. найти родственников по фамилии – это можно сделать по справочникам в Библиотеке либо по общереспубликанскому телефону справочной службы (Справочная служба о номерах телефонов квартир и организаций - № тел. 109, Мингорсправка - № тел. 168, международный код г.Минска +375 17). Однако даже в этом случае, чтобы дойти до нужного адресата, Вам понадобится хотя бы ФИО, либо адрес, либо телефон. Но это самая простая ситуация, и если человек долго проживает и прописан в Беларуси, то отыскать его не должно составить труда.

Но на короткие белорусские номера из богоспасаемой не позвонить. Есть советы, куда бежать?

Date: 2014-10-02 12:08 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Точно не знаю, не пользовался.
Если Минск, то могу глянуть по старой телефонной базе, в личку фамилию и адрес скиньте.

(no subject)

From: [personal profile] leotsarev - Date: 2014-10-02 12:08 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-10-02 12:16 pm (UTC) - Expand

(no subject)

From: [personal profile] leotsarev - Date: 2014-10-02 12:22 pm (UTC) - Expand

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 5th, 2025 07:41 am
Powered by Dreamwidth Studios