powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Исключения: за и против
25 сообщений из 158, страница 2 из 7
Исключения: за и против
    #34348343
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A. Fig Leeне верю. коряво написано значит. надо листы хранить выделенной памяти.

написано нормально.

новая карта памяти ложится дыряво. и там и надо. и флаги не помогут (вроде на каждуюб ячейку еще рядом флаг, читается она или нет)

так, например, по тз два соседних адреса моугт быть на мегабайты друг от друга на новой карте памяти. короче, это - такое тз, где без исключений не обойтись
...
Рейтинг: 0 / 0
Исключения: за и против
    #34348372
man_555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в дополнение:
Код: plaintext
1.
2.
3.
4.
5.
f() {

    int a = f1() + f2() + f3() + f4();
}


допустим в функции f3() происходит ошибка и она возвращает -1, а во всех остальных случаях положительное число. IMHO обработать такое классически несколько громоздко.

при то же: если для получения своего значения f4() вызыает цепочку из N функций, и ошибка происходит в самой последней?
...
Рейтинг: 0 / 0
Исключения: за и против
    #34348409
Фотография VirtualMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел высказаться, но:
Ваня1. Когда ошибку можно обработать на месте, ее нужно обрабатывать на месте.
2. Если ошибка должна обрабатываться выше, то можно из функции вернуть код ошибки или возбудить исключение. Естественно, оба способа требуют проектирования - нужно будет спроектировать иерархию исключений или прописать в документации по разработке, что означают коды ошибок.

Этим сказано всё. Присоединяюсь.
исключения дают вам гибкость, но нужно знать где их следует применять а где нет.
Бензопила удобна для валки деревьев, но по фанере выпиливать ей неудобно.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34348437
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
man_555в дополнение:
Код: plaintext
1.
2.
3.
f() {
    int a = f1() + f2() + f3() + f4();
}
допустим в функции f3() происходит ошибка и она возвращает -1, а во всех остальных случаях положительное число. IMHO обработать такое классически несколько громоздко.Функция которая может вернуться с ошибкой никогда не используется в формулах. Хотя бы потому, что это бессмысленно.

man_555при то же: если для получения своего значения f4() вызыает цепочку из N функций, и ошибка происходит в самой последней?Да какая разница сколько функций в цепочке? Если я вызываю f4(), то все ошибки которые там где-то происходили и пришли ко мне - это уже ошибки исходящие из f4(). Каждая функция это "черный ящик", в него суешь параметры, из него получаешь ответ. Ошибка это тоже ответ. И в каких глубинах она произошла совершенно не важно.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34348455
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
man_555 White Owl А все необработаные просто return errorcode; и все.
а можно с этого места поподробнее?А что тут объяснять?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
int f1() {
   int rc = f2();
   switch(rc) {
   case FIRST_KNOWN_ERROR: /// чего-то делаем
           break;
   case SECOND_KNOWN_ERROR: /// чего-то делаем
           break;
   default: return rc;
   }
   // ошибок не было или ошибки не критичные
   // продолжаем работу
}
...
Рейтинг: 0 / 0
Исключения: за и против
    #34348606
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin A. Fig Leeне верю. коряво написано значит. надо листы хранить выделенной памяти.

написано нормально.

новая карта памяти ложится дыряво. и там и надо. и флаги не помогут (вроде на каждуюб ячейку еще рядом флаг, читается она или нет)

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

по-моему, вы говорите не о тех исключениях. То, что у Вас - ето машиной сгенерированный сигнал PageFault ну или типа того, смотря какая операционка. Ничего общего не имеет с C++ исключениями.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34348702
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A. Fig LeeУгу. Если писать программы для трейдинга - там каждая микросекунда на счету.
Или ввобще что-нибудь реалтайм.

Такой подход имеет место. Я-бы выделил три класса API (по целевому назначению):

1) Низкоуровневый API . Высокие требования к скорости выполнения инструкций. Инструкции - атомарны и всегда выполняются успешно. Код ошибок возвращается в специальный регистр флагов или переменную (типа errorlevel). Программист вручную проверяет результат и принимает соотв. решение.

2) Классический API . Процедуры могут прерывать своё выполнение в зависимости от состояния и возвращать результат в виде кода ошибки. Программист обязан проверить код ошибки.

3) Прикладной API . Процедуры могут прерывать выполнение и генерировать сигналы или исключения. Программист их может обрабатывать или ингорировать по усмотрению.

Возможно существуют 4 и 5 уровни.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34349203
man_555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl

Спор бессмысленен, потому как это разные подходы к решению одной и той же проблемы, только exceptions всё же удобней IMHO :-)

И второе, IMHO эксепшены надёжней, потому как ты никогда не можешь поручиться за чужой код. Может случиться так, что в одно пасмурное утро тебе откроется истина, и... офигеть! f4() которая до этого собственноручно была проверена на отсутствие возврата кода ошибки, теперь возвращает код ошибки, потому что за время твоего отпуска коллега X поменял её. Его часть с f4 работает, а твоя уже не совсем - как повезёт. Идем дальше. Теперь надо найти все места с f4 и воткнуть проверки.

Сопровождение усложняется по-любому. Впрочем, такой стиль при написании тоже не экономит время.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34349217
man_555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlФункция которая может вернуться с ошибкой никогда не используется в формулах. Хотя бы потому, что это бессмысленно.

Батюшки! Глупости лучше говорить про себя.

Попробуй вместо f4 поставить StrToFloatF из VCL или StrToInt, которая если бы не кидала эксепшн, то точно бы меняла твой результат, и париться с поиском такой ошибки я вам скажу весьма и весьма неприятно.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34349266
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton A. Fig LeeУгу. Если писать программы для трейдинга - там каждая микросекунда на счету.
Или ввобще что-нибудь реалтайм.

Такой подход имеет место. Я-бы выделил три класса API (по целевому назначению):
...
Возможно существуют 4 и 5 уровни.

Существуют, например
<a href="http://www.objectmentor.com/resources/articles/crosscst.pdf">так</a>
...
Рейтинг: 0 / 0
Исключения: за и против
    #34349737
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A. Fig Leeа шо у нас со скоростью работы программ напичканых ексепшинами?
Ась?

Если исключения не возникают, скорость не меняется сильно.

Если исключение возникает, естественно это требует какой-то обработки.
Раскрутка стека требует значительного времени : все деструкторы надо вызвать,
ну и еще там много всего. Но ИСКЛЮЧЕНИЯ НЕ ВОЗНИКАЮТ ЧАСТО. Они - только для исключительных ситуаций, для ошибок. Поэтому ничего страшного нет.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34349757
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklinнет, вы поняли неправильно.
я имел ввиду
1) я, собственно, против


Был один такой "против". У него 50% кода занимали обработки ошибок.
Код естественно частично не работал, а часть, которая работала,
достаточно серьезно замедляла работу.

Тут идея в чем.

lev_0
lev_1
lev_2
lev_lowest <---- error appears here.

При использовании exceptions код обработки ошибок на уровнях

lev_1
lev_2

чаще всего (80% ) можно выбросить.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34349836
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl man_555 White Owl А все необработаные просто return errorcode; и все.
а можно с этого места поподробнее?А что тут объяснять?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
int f1() {
   int rc = f2();
   switch(rc) {
   case FIRST_KNOWN_ERROR: /// чего-то делаем
           break;
   case SECOND_KNOWN_ERROR: /// чего-то делаем
           break;
   default: return rc;
   }
   // ошибок не было или ошибки не критичные
   // продолжаем работу
}


О, зашибизь код !! Были бы эксепшены, этой функции ВООБЩЕ БЫ НЕ СУЩЕСТВОВАЛО !
...
Рейтинг: 0 / 0
Исключения: за и против
    #34351010
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
man_555И второе, IMHO эксепшены надёжней, потому как ты никогда не можешь поручиться за чужой код. Может случиться так, что в одно пасмурное утро тебе откроется истина, и... офигеть! f4() которая до этого собственноручно была проверена на отсутствие возврата кода ошибки, теперь возвращает код ошибки, потому что за время твоего отпуска коллега X поменял её. Его часть с f4 работает, а твоя уже не совсем - как повезёт. Идем дальше. Теперь надо найти все места с f4 и воткнуть проверки.Ты считаешь что в этом случае, исключения тебя спасут?

man_555Попробуй вместо f4 поставить StrToFloatF из VCL или StrToInt, которая если бы не кидала эксепшн, то точно бы меняла твой результат, и париться с поиском такой ошибки я вам скажу весьма и весьма неприятно.Какая ошибка я буду искать, простите?

MasterZivО, зашибизь код !! Были бы эксепшены, этой функции ВООБЩЕ БЫ НЕ СУЩЕСТВОВАЛО !Правда? Не существовало бы? А ну-ка, откроем библию, глава 9.1.1:
Угадай автора с трех попыток :)В зависимости от особой ситуации будет выполняться соответствующий
обработчик. Если управление дойдет до конца операторов обработчика,
следующим будет выполняться оператор, который идет после списка
обработчиков:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        void f()
        {
          try {
             use_vectors();
          }
          catch (Vector::Range) {
             // исправить индекс и
             // попробовать опять:
             f();
          }
          catch (Vector::Size) {
             cerr << "Ошибка в конструкторе Vector::Size";
             exit( 99 );
          }
          // сюда мы попадем, если вообще не было особых ситуаций
          // или после обработки особой ситуации Range
       }

...
Рейтинг: 0 / 0
Исключения: за и против
    #34351368
man_555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl man_555И второе, IMHO эксепшены надёжней, потому как ты никогда не можешь поручиться за чужой код. Может случиться так, что в одно пасмурное утро тебе откроется истина, и... офигеть! f4() которая до этого собственноручно была проверена на отсутствие возврата кода ошибки, теперь возвращает код ошибки, потому что за время твоего отпуска коллега X поменял её. Его часть с f4 работает, а твоя уже не совсем - как повезёт. Идем дальше. Теперь надо найти все места с f4 и воткнуть проверки.Ты считаешь что в этом случае, исключения тебя спасут?

Считаю, что спасут. Unhandled exceptions слышал про такое?

White OwlКакая ошибка я буду искать, простите? ашыбка? Какая ошибки не ищут.

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

White Owl
Правда? Не существовало бы? А ну-ка, откроем библию, глава 9.1.1:Угадай автора с трех попыток :)
В зависимости от особой ситуации будет выполняться соответствующий
обработчик. Если управление дойдет до конца операторов обработчика,
следующим будет выполняться оператор, который идет после списка
обработчиков:

void f()
{
try {
use_vectors();
}
catch (Vector::Range) {
// исправить индекс и
// попробовать опять:
f();
}
catch (Vector::Size) {
cerr << "Ошибка в конструкторе Vector::Size";
exit(99);
}
// сюда мы попадем, если вообще не было особых ситуаций
// или после обработки особой ситуации Range
}


Возьми с полки пряник! Ты ни черта не понял.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34351443
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
man_555Считаю, что спасут. Unhandled exceptions слышал про такое?Слышал, слышал... Только я все равно не понимаю чем необработное исключение убежавшее за пределы твоих catch'ей и перехваченое в итоге каким-нибудь глобальным catch(AbstractException) (если не системой) лучше чем код возврата обработаный процедурой "разные другие ошибки"?

man_555Напиши свою рализацию StrToInt , которая будет работать быстрей, потому что ты не пользуешься механизмом исключений.Уже написана. sscanf() называется. И она намного мощнее :)

man_555Возьми с полки пряник! Ты ни черта не понял.Ну так объясни. Покажи мне два исходника один с исключениями другой без, делающие одно и тоже. И объясни почему исходник с исключениями так сильно лучше? Давай без абстракций, на конкретном реальном примере.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34351493
man_555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНу так объясни. Покажи мне два исходника один с исключениями другой без, делающие одно и тоже. И объясни почему исходник с исключениями так сильно лучше? Давай без абстракций, на конкретном реальном примере.

Думаю ты и сам в состоянии сравнить обработку ошибок, к примеру в том же StrToInt и слегка архаичном sscanf. Только возьми побольше StrToInt и столько же sscanf.
White OwlТолько я все равно не понимаю чем необработное исключение убежавшее за пределы твоих catch'ей и перехваченое в итоге каким-нибудь глобальным catch(AbstractException) (если не системой) лучше чем код возврата обработаный процедурой "разные другие ошибки"?
White Owl, не доверяешь электричеству? Керосин как-то привычней? Ну тогда пилите, Шура, пилите.

Скажу, что в debug режиме все exceptions билдер моментально подсвечивает, в то время как ваши returns работают тихим сапом. А вообще знаешь такую игру: "испорченый телефон"? Вот например:
Код: plaintext
1.
2.
3.
4.
5.
Отобразить()
      int ПолучитьДанные()
           int ОткрытьФайл()
           int ПрочитатьФайл()
           int ЗакрытьФайл()

Можно всё обработать в ПолучитьДанные(), но концептуально это не верно, потому как ПолучитьДанные() будет занимаеться побочным эффектом - рисованием окошка: "чувак, твой файл говно", поэтому придётся всё отдать в Отобразить().

А теперь представим, что разработчики написали, сами того не желая, испорченый телефон в попытках передать код ошибки "наверх", и Отобразить() получил совсем не тот код ошибки?

Вобщем, примерно это в нескольких постах разные люди это пытались растолковать. Надеюсь теперь понятно.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34351506
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
man_555 White OwlНу так объясни. Покажи мне два исходника один с исключениями другой без, делающие одно и тоже. И объясни почему исходник с исключениями так сильно лучше? Давай без абстракций, на конкретном реальном примере.
Думаю ты и сам в состоянии сравнить обработку ошибок, к примеру в том же StrToInt и слегка архаичном sscanf. Только возьми побольше StrToInt и столько же sscanf.То есть показать на конкретном примере преимущество исключений ты не можешь.

man_555А теперь представим, что разработчики написали, сами того не желая, испорченый телефон в попытках передать код ошибки "наверх", и Отобразить() получил совсем не тот код ошибки?

Вобщем, примерно это в нескольких постах разные люди это пытались растолковать. Надеюсь теперь понятно.Нет, не понятно. Да, разработчики могут написать криво и отдать наверх не тот код ошибки. Но эти же самые разработчики могут с тем же успехом написать криво и отдать наверх не то исключение. Ищи другое приемущество исключений.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34351628
man_555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, может хватит уже?
...
Рейтинг: 0 / 0
Исключения: за и против
    #34351891
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
man_555в дополнение:
Код: plaintext
1.
2.
3.
4.
5.
f() {

    int a = f1() + f2() + f3() + f4();
}


допустим в функции f3() происходит ошибка и она возвращает -1, а во всех остальных случаях положительное число. IMHO обработать такое классически несколько громоздко.

при то же: если для получения своего значения f4() вызыает цепочку из N функций, и ошибка происходит в самой последней?

можно обойтись static флагом, а не строить умопомрачительные конструкции и перекладывать все на систему.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34351914
man_555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin man_555в дополнение:
Код: plaintext
1.
2.
3.
4.
5.
f() {

    int a = f1() + f2() + f3() + f4();
}


допустим в функции f3() происходит ошибка и она возвращает -1, а во всех остальных случаях положительное число. IMHO обработать такое классически несколько громоздко.

при том же: если для получения своего значения f4() вызыает цепочку из N функций, и ошибка происходит в самой последней?

можно обойтись static флагом, а не строить умопомрачительные конструкции и перекладывать все на систему.

Ну, можно. Что дальше? Уже становится смешно, ей богу! Пора останавливать этот флейм.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34352221
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
man_555White Owl, может хватит уже?Почему хватит? Ты утверждаешь что исключения это так круто, прогрессивно и замечательно. Утверждаешь что функция возвращающая код ошибки это устаревшая технология а функция прерывающая свою работу с исключением это правильная технология. Ты так считаешь? Ну так докажи.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34352264
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin
можно обойтись static флагом, а не строить умопомрачительные конструкции и перекладывать все на систему.

А если ниток больше одной?
...
Рейтинг: 0 / 0
Исключения: за и против
    #34352396
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил Aklin
можно обойтись static флагом, а не строить умопомрачительные конструкции и перекладывать все на систему.

А если ниток больше одной?

1) thread local storage?
2) f(&ret); где ret - возвращаемый код ошибки ?
...
Рейтинг: 0 / 0
Исключения: за и против
    #34353741
daevaorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl[quot man_555]Ты так считаешь? Ну так докажи.
а попробуй доказать обратное, а?
...
Рейтинг: 0 / 0
25 сообщений из 158, страница 2 из 7
Форумы / C++ [игнор отключен] [закрыт для гостей] / Исключения: за и против
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]