|
|
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
A. Fig Leeне верю. коряво написано значит. надо листы хранить выделенной памяти. написано нормально. новая карта памяти ложится дыряво. и там и надо. и флаги не помогут (вроде на каждуюб ячейку еще рядом флаг, читается она или нет) так, например, по тз два соседних адреса моугт быть на мегабайты друг от друга на новой карте памяти. короче, это - такое тз, где без исключений не обойтись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 19:19 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
в дополнение: Код: plaintext 1. 2. 3. 4. 5. допустим в функции f3() происходит ошибка и она возвращает -1, а во всех остальных случаях положительное число. IMHO обработать такое классически несколько громоздко. при то же: если для получения своего значения f4() вызыает цепочку из N функций, и ошибка происходит в самой последней? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 19:33 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
Хотел высказаться, но: Ваня1. Когда ошибку можно обработать на месте, ее нужно обрабатывать на месте. 2. Если ошибка должна обрабатываться выше, то можно из функции вернуть код ошибки или возбудить исключение. Естественно, оба способа требуют проектирования - нужно будет спроектировать иерархию исключений или прописать в документации по разработке, что означают коды ошибок. Этим сказано всё. Присоединяюсь. исключения дают вам гибкость, но нужно знать где их следует применять а где нет. Бензопила удобна для валки деревьев, но по фанере выпиливать ей неудобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 20:03 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
man_555в дополнение: Код: plaintext 1. 2. 3. man_555при то же: если для получения своего значения f4() вызыает цепочку из N функций, и ошибка происходит в самой последней?Да какая разница сколько функций в цепочке? Если я вызываю f4(), то все ошибки которые там где-то происходили и пришли ко мне - это уже ошибки исходящие из f4(). Каждая функция это "черный ящик", в него суешь параметры, из него получаешь ответ. Ошибка это тоже ответ. И в каких глубинах она произошла совершенно не важно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 20:22 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
man_555 White Owl А все необработаные просто return errorcode; и все. а можно с этого места поподробнее?А что тут объяснять? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 20:35 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
Aklin A. Fig Leeне верю. коряво написано значит. надо листы хранить выделенной памяти. написано нормально. новая карта памяти ложится дыряво. и там и надо. и флаги не помогут (вроде на каждуюб ячейку еще рядом флаг, читается она или нет) так, например, по тз два соседних адреса моугт быть на мегабайты друг от друга на новой карте памяти. короче, это - такое тз, где без исключений не обойтись по-моему, вы говорите не о тех исключениях. То, что у Вас - ето машиной сгенерированный сигнал PageFault ну или типа того, смотря какая операционка. Ничего общего не имеет с C++ исключениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 22:48 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
A. Fig LeeУгу. Если писать программы для трейдинга - там каждая микросекунда на счету. Или ввобще что-нибудь реалтайм. Такой подход имеет место. Я-бы выделил три класса API (по целевому назначению): 1) Низкоуровневый API . Высокие требования к скорости выполнения инструкций. Инструкции - атомарны и всегда выполняются успешно. Код ошибок возвращается в специальный регистр флагов или переменную (типа errorlevel). Программист вручную проверяет результат и принимает соотв. решение. 2) Классический API . Процедуры могут прерывать своё выполнение в зависимости от состояния и возвращать результат в виде кода ошибки. Программист обязан проверить код ошибки. 3) Прикладной API . Процедуры могут прерывать выполнение и генерировать сигналы или исключения. Программист их может обрабатывать или ингорировать по усмотрению. Возможно существуют 4 и 5 уровни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 01:08 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl Спор бессмысленен, потому как это разные подходы к решению одной и той же проблемы, только exceptions всё же удобней IMHO :-) И второе, IMHO эксепшены надёжней, потому как ты никогда не можешь поручиться за чужой код. Может случиться так, что в одно пасмурное утро тебе откроется истина, и... офигеть! f4() которая до этого собственноручно была проверена на отсутствие возврата кода ошибки, теперь возвращает код ошибки, потому что за время твоего отпуска коллега X поменял её. Его часть с f4 работает, а твоя уже не совсем - как повезёт. Идем дальше. Теперь надо найти все места с f4 и воткнуть проверки. Сопровождение усложняется по-любому. Впрочем, такой стиль при написании тоже не экономит время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 10:20 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White OwlФункция которая может вернуться с ошибкой никогда не используется в формулах. Хотя бы потому, что это бессмысленно. Батюшки! Глупости лучше говорить про себя. Попробуй вместо f4 поставить StrToFloatF из VCL или StrToInt, которая если бы не кидала эксепшн, то точно бы меняла твой результат, и париться с поиском такой ошибки я вам скажу весьма и весьма неприятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 10:25 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
mayton A. Fig LeeУгу. Если писать программы для трейдинга - там каждая микросекунда на счету. Или ввобще что-нибудь реалтайм. Такой подход имеет место. Я-бы выделил три класса API (по целевому назначению): ... Возможно существуют 4 и 5 уровни. Существуют, например <a href="http://www.objectmentor.com/resources/articles/crosscst.pdf">так</a> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 10:36 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
A. Fig Leeа шо у нас со скоростью работы программ напичканых ексепшинами? Ась? Если исключения не возникают, скорость не меняется сильно. Если исключение возникает, естественно это требует какой-то обработки. Раскрутка стека требует значительного времени : все деструкторы надо вызвать, ну и еще там много всего. Но ИСКЛЮЧЕНИЯ НЕ ВОЗНИКАЮТ ЧАСТО. Они - только для исключительных ситуаций, для ошибок. Поэтому ничего страшного нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 12:25 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
Aklinнет, вы поняли неправильно. я имел ввиду 1) я, собственно, против Был один такой "против". У него 50% кода занимали обработки ошибок. Код естественно частично не работал, а часть, которая работала, достаточно серьезно замедляла работу. Тут идея в чем. lev_0 lev_1 lev_2 lev_lowest <---- error appears here. При использовании exceptions код обработки ошибок на уровнях lev_1 lev_2 чаще всего (80% ) можно выбросить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 12:31 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl man_555 White Owl А все необработаные просто return errorcode; и все. а можно с этого места поподробнее?А что тут объяснять? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. О, зашибизь код !! Были бы эксепшены, этой функции ВООБЩЕ БЫ НЕ СУЩЕСТВОВАЛО ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 12:41 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 18:07 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
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 } Возьми с полки пряник! Ты ни черта не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 22:04 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
man_555Считаю, что спасут. Unhandled exceptions слышал про такое?Слышал, слышал... Только я все равно не понимаю чем необработное исключение убежавшее за пределы твоих catch'ей и перехваченое в итоге каким-нибудь глобальным catch(AbstractException) (если не системой) лучше чем код возврата обработаный процедурой "разные другие ошибки"? man_555Напиши свою рализацию StrToInt , которая будет работать быстрей, потому что ты не пользуешься механизмом исключений.Уже написана. sscanf() называется. И она намного мощнее :) man_555Возьми с полки пряник! Ты ни черта не понял.Ну так объясни. Покажи мне два исходника один с исключениями другой без, делающие одно и тоже. И объясни почему исходник с исключениями так сильно лучше? Давай без абстракций, на конкретном реальном примере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 23:12 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White OwlНу так объясни. Покажи мне два исходника один с исключениями другой без, делающие одно и тоже. И объясни почему исходник с исключениями так сильно лучше? Давай без абстракций, на конкретном реальном примере. Думаю ты и сам в состоянии сравнить обработку ошибок, к примеру в том же StrToInt и слегка архаичном sscanf. Только возьми побольше StrToInt и столько же sscanf. White OwlТолько я все равно не понимаю чем необработное исключение убежавшее за пределы твоих catch'ей и перехваченое в итоге каким-нибудь глобальным catch(AbstractException) (если не системой) лучше чем код возврата обработаный процедурой "разные другие ошибки"? White Owl, не доверяешь электричеству? Керосин как-то привычней? Ну тогда пилите, Шура, пилите. Скажу, что в debug режиме все exceptions билдер моментально подсвечивает, в то время как ваши returns работают тихим сапом. А вообще знаешь такую игру: "испорченый телефон"? Вот например: Код: plaintext 1. 2. 3. 4. 5. Можно всё обработать в ПолучитьДанные(), но концептуально это не верно, потому как ПолучитьДанные() будет занимаеться побочным эффектом - рисованием окошка: "чувак, твой файл говно", поэтому придётся всё отдать в Отобразить(). А теперь представим, что разработчики написали, сами того не желая, испорченый телефон в попытках передать код ошибки "наверх", и Отобразить() получил совсем не тот код ошибки? Вобщем, примерно это в нескольких постах разные люди это пытались растолковать. Надеюсь теперь понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 00:30 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
man_555 White OwlНу так объясни. Покажи мне два исходника один с исключениями другой без, делающие одно и тоже. И объясни почему исходник с исключениями так сильно лучше? Давай без абстракций, на конкретном реальном примере. Думаю ты и сам в состоянии сравнить обработку ошибок, к примеру в том же StrToInt и слегка архаичном sscanf. Только возьми побольше StrToInt и столько же sscanf.То есть показать на конкретном примере преимущество исключений ты не можешь. man_555А теперь представим, что разработчики написали, сами того не желая, испорченый телефон в попытках передать код ошибки "наверх", и Отобразить() получил совсем не тот код ошибки? Вобщем, примерно это в нескольких постах разные люди это пытались растолковать. Надеюсь теперь понятно.Нет, не понятно. Да, разработчики могут написать криво и отдать наверх не тот код ошибки. Но эти же самые разработчики могут с тем же успехом написать криво и отдать наверх не то исключение. Ищи другое приемущество исключений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 00:52 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl, может хватит уже? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 09:34 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
man_555в дополнение: Код: plaintext 1. 2. 3. 4. 5. допустим в функции f3() происходит ошибка и она возвращает -1, а во всех остальных случаях положительное число. IMHO обработать такое классически несколько громоздко. при то же: если для получения своего значения f4() вызыает цепочку из N функций, и ошибка происходит в самой последней? можно обойтись static флагом, а не строить умопомрачительные конструкции и перекладывать все на систему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 13:26 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
Aklin man_555в дополнение: Код: plaintext 1. 2. 3. 4. 5. допустим в функции f3() происходит ошибка и она возвращает -1, а во всех остальных случаях положительное число. IMHO обработать такое классически несколько громоздко. при том же: если для получения своего значения f4() вызыает цепочку из N функций, и ошибка происходит в самой последней? можно обойтись static флагом, а не строить умопомрачительные конструкции и перекладывать все на систему. Ну, можно. Что дальше? Уже становится смешно, ей богу! Пора останавливать этот флейм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 13:50 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
man_555White Owl, может хватит уже?Почему хватит? Ты утверждаешь что исключения это так круто, прогрессивно и замечательно. Утверждаешь что функция возвращающая код ошибки это устаревшая технология а функция прерывающая свою работу с исключением это правильная технология. Ты так считаешь? Ну так докажи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 17:39 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
Aklin можно обойтись static флагом, а не строить умопомрачительные конструкции и перекладывать все на систему. А если ниток больше одной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 18:15 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
Изопропил Aklin можно обойтись static флагом, а не строить умопомрачительные конструкции и перекладывать все на систему. А если ниток больше одной? 1) thread local storage? 2) f(&ret); где ret - возвращаемый код ошибки ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 21:15 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34353741&tid=2029270]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 474ms |

| 0 / 0 |
