Модераторы: Се ля ви
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка ошибок или параноя? Как обрабатывать ошибки исполнения? 
:(
    Опции темы
raznodel
Дата 20.11.2009, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



Вокруг меня работают успешно 10ки программ, я уж не говорю о количестве успешно работающих сайтов. Но когда я начинаю писать программу хочется чтоб все работало так а не иначе. И тут появляются они потенциальные ошибки выполнения, и естественный вопрос что с ними делать. 

Разберем на конкретном примере. Вот пишу я простенькую программу на C++ с использованием  WinAPI. Хочу в ней сделать простое действие - поменять текст на кнопке, делается это просто вызовом функции SetWindowText(хандл, текст). 

Функция то простецкая, да вот засада она возвращает флаг  результата выполнения операции. Ну чтож думаю дай посмотрю что может быть каверзного при смене заголовка, если произошла ошибка то надо вызвать GetLastError смотрим её описание она используется при всех ошибках, и имеет 50000 тыс кодов ошибок, понятно что искать которые потенциально могут относиться к смене текста бесполезно, тогда предполагаем что такие ошибки есть. И что нам теперь делать? Проверять каждый раз результат операции, если неудачный то генерить исключение и выходить посредством его из программы..? 

Получается какая то параноя, может тупо забить на это, предполагая нереальность данной ситуации? Может стоит обрабатывать только реально потенциальные ошибки, например нехватка бумаги в принтере при печати, несущ файла...? 
Вот и выходит какая то параноя. А как пишите Вы, уважаемые кодеры, пусть не на C++  и не на WinAPI, это просто пример.
PM MAIL   Вверх
raznodel
Дата 21.11.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



М... просмотры есть, ответов нет... Странно, неужели все просто не рассматривают данный вопрос, или просто не ту ветку выбрал, может в другое место форума запостить  smile  ?
PM MAIL   Вверх
Abyx
Дата 21.11.2009, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: нет
Всего: 10



обработка ошибок пишется там где могут быть ошибки.

Добавлено через 3 минуты и 19 секунд
SetWindowText может вернуть 1 ошибку - неправильный хендл
если Вы уверены что хендл правильный проверять не надо.
если допускаете что он может быть неправильным - проверять надо
при этом, максимум что случится - текст не будет задан. пользователь это заметит и напишет багрепорт
PM MAIL   Вверх
raznodel
Дата 23.11.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



М.. а ошибки выделения памяти, ведь они возможны но достаточно редки их как обрабатывать? Выносить исключением программу, писать что нехватает памяти и выходить или как, тупо забить?
PM MAIL   Вверх
source777
Дата 23.11.2009, 21:52 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(raznodel @  23.11.2009,  20:03 Найти цитируемый пост)
а ошибки выделения памяти, ведь они возможны но достаточно редки их как обрабатывать? Выносить исключением программу, писать что нехватает памяти и выходить или как, тупо забить? 

зависит от программы... и требований к ней.
Лучший вариант: перейди на любой современный язык программирования и забудь про ручное управление выделением памяти.

Добавлено через 2 минуты и 6 секунд
Цитата(raznodel @  21.11.2009,  18:32 Найти цитируемый пост)
М... просмотры есть, ответов нет... Странно,

Что тут странного? Покажи мне хотя бы одну тему, в которой количество просмотров совпадает с количеством ответов.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Abyx
Дата 23.11.2009, 22:47 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: нет
Всего: 10



raznodel, если ты можеш справиться с ошибкой выделения памяти (своя выделялка и т.п.) - пиши обработчик
если не можешь - пиши сообщение "program died" и пиши ошибку в лог чтобы юзер мог тебе отправить этот лог, и ты пофиксил бы ошибку в следующей версии программы, если это ошибка программы, а не попытка юзера выделить памяти больше чем доступно на его машине

Добавлено через 2 минуты и 33 секунды
source777, представь себе, в некоторых современных языках программирования, нет автоматического выделения памяти.
что характерно во многих устаревших языках программирования, оно было. 
нет никакой связи между управлением памятью и современностью языка программирования.
PM MAIL   Вверх
source777
Дата 24.11.2009, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(Abyx @  23.11.2009,  22:47 Найти цитируемый пост)
source777, представь себе, в некоторых современных языках программирования, нет автоматического выделения памяти.

 smile 
Что ж так голословно? Давай, назови хотя бы 5 мейнстрим языков программирования, не старше 15 лет, требующих ручного управления памятью.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Abyx
Дата 24.11.2009, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: нет
Всего: 10



source777, "новый" не равно "современный"
современный - это тот, который сейчас активно используется и развивается

однако,
С99 не старше 15 лет, последний стандарт был в 99 году, в никсах на С пишут не меньше чем на С++
С++03  не старше 15 лет, последний стандарт был в 2003 году, готовится новый стандарт, постоянно обновляются компиляторы и т.п.
D совсем новый язык, впрочем непопулярный, потому что о нем никто не знает
дельфи тоже еще живет, в 2009 в нее вроде лямбды добавили о_О
в определенных отраслях писали и пишут исключительно на асме.

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

на счет ошибок выделения памяти.
автоматическое управление памятью никак не спасет от ошибки при выделении памяти, и скорей всего никак не позволит обработать эту ошибку.
если в win32 приложению доступно только 2Гб виртуальной памяти, никакой язык с автоматическим выделением памяти не может выделить 2.1Гб

Добавлено через 3 минуты и 7 секунд
source777, ТС спросил "что делать при нехватке памяти"
как современный язык программирования с автоматическим управлением памятью поможет от нехватки памяти?
PM MAIL   Вверх
source777
Дата 24.11.2009, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(Abyx @  24.11.2009,  19:51 Найти цитируемый пост)
"новый" не равно "современный"

это уже другой философский вопрос. Если язык программирования в своём развитии следует принципу обратной совместимости, то он постепенно морально устаревает. Это можно наблюдать на примере и С++ и Delphi. Что бы не говорили их фанаты... С++ уже стал нишевым языком, а Delphi так вообще поспособствовал банкротству самой Borland. 
Да, сейчас предпринимаются некоторые шаги по реанимации этих языков, портируются фичи из тех же .NET и Java. Но мне все эти попытки видятся недальновидными, т.к. роль догоняющего в данном вопросе бесперспективна.
Кстати, fyi: Delphi не всегда требует ручного управления памятью, издревле там есть рефкаунтинг через интерфейсы.

Цитата(Abyx @  24.11.2009,  19:51 Найти цитируемый пост)
в определенных отраслях писали и пишут исключительно на асме.

ну и что, в определённых отраслях до сих пор MS DOS используют, это не повод считать её современной ОС.


Цитата(Abyx @  24.11.2009,  19:51 Найти цитируемый пост)
D совсем новый язык, впрочем непопулярный, потому что о нем никто не знает

Ну, во-первых, 10 лет это уже не "совсем новый". А во-вторых, D использует сборщик мусора и уж точно не требует ручного управления памятью.


Цитата(Abyx @  24.11.2009,  19:51 Найти цитируемый пост)
автоматическое управление памятью никак не спасет от ошибки при выделении памяти
смотря с чем связана ошибка: с тем что реально не хватает памяти или с memory leaks. Первое уже становится фантастической ситуацией для большинства приложений, а второе практически исключается наличием сборщика мусора.
Но даже в крайнем случае получить разумное исключение гораздо приятнее, чем просто код ошибки.


Цитата(Abyx @  24.11.2009,  19:51 Найти цитируемый пост)
source777, ТС спросил "что делать при нехватке памяти"

ТС спрашивал про "ошибки выделения памяти", которые не всегда связаны с её реальной нехваткой.

Цитата(Abyx @  24.11.2009,  19:51 Найти цитируемый пост)
ручное выделение памяти важно в программах, критичных к объему памяти.
никто собственно обратного и не утверждал, но речь изначально шла о WinAPI, а кому придёт в голову ставить Windows на оборудование(про ПК в данном контексте и речи быть не может), в котором важна экономия ресурсов?


P.S. 5 ЯП ты назвал, но только 3 из них реально требуют ручного управления памятью(asm, C, C++) + ни один из этих трёх нельзя назвать современным(учитывая что у самого молодого из них уже 30-летняя история), так что незачёт.
 smile 


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Abyx
Дата 25.11.2009, 00:37 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: нет
Всего: 10



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

назови хоть один (а не 5) "современный" "мейнстримовый" язык который например позволял бы работать с матрицами из десятков миллионов элементов?
я что-то плохо себе представляю ansys или nastran написанный на джаве или C#

т.е. на каком современном языке можно решать ресурсоемкие задачи?
PM MAIL   Вверх
source777
Дата 25.11.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(Abyx @  25.11.2009,  00:37 Найти цитируемый пост)
язык который например позволял бы работать с матрицами из десятков миллионов элементов?

чтобы работать с матрицами есть MatLab, J, Octave, etc., нет смысла подстраивать язык общего назначения под узкоспециализированную программу и дело тут отнюдь не в производительности мейнстрим языков (тот же C# в среднем всего на 30% медленнее С++, при условии что С++ программа скомпилирована из исходников), дело в том, что под каждую задачу нужно выбирать язык, который для этой задачи подходит лучше других. Я не отрицаю, что и для С++ до сих пор есть такие задачи, но их число год от года стремительно сокращается.
Если есть сильное желание всё же использовать мейнстрим языки для математических задач, то можно спокойно использовать Haskell, Python + NumPy + SciPy, C# + Numerical components + Math.NET, и даже в крайнем случае Java + JMathTools.


Цитата(Abyx @  25.11.2009,  00:37 Найти цитируемый пост)
я что-то плохо себе представляю ansys или nastran написанный на джаве или C#
конечно, сложно представить, чтобы в 60-70-ые годы их начали писать на несуществующих в то время языках.


Цитата(Abyx @  25.11.2009,  00:37 Найти цитируемый пост)
т.е. на каком современном языке можно решать ресурсоемкие задачи? 

ресурсоёмкие задачи тоже бывают разные, про математические я написал выше...
Кроме того ресурсоёмкие задачи принято решать на уровне алгоритма, а конкретный язык реализации, как правило, уже не столь важен. Т.к. на уровне алгоритма можно получить ускорение в десятки и даже тысячи раз, а при переписывании, к примеру, с Java на С в самом крайнем случае в 2-3 раза.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Abyx
Дата 25.11.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: нет
Всего: 10



Цитата(source777 @  25.11.2009,  13:45 Найти цитируемый пост)
C# в среднем всего на 30% медленнее С++

что такое "в среднем" и откуда такое число?

под ресурсоемкостью я имел в виду объем памяти, не только скорость выполнения операций.
есть статистика, во сколько раз больше требуется памяти в Haskell, Python, C# или Java по сравнению с С++?

PM MAIL   Вверх
source777
Дата 25.11.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(Abyx @  25.11.2009,  16:39 Найти цитируемый пост)
что такое "в среднем" и откуда такое число?

Да это на RSDN давно измеряли(сейчас разница будет ещё меньше), а "в среднем" значит по результатам всех тестов.


Цитата(Abyx @  25.11.2009,  16:39 Найти цитируемый пост)
есть статистика, во сколько раз больше требуется памяти в Haskell, Python, C# или Java по сравнению с С++?

Тут никакой статистики быть не может, во-первых, сильно зависит от задачи, во-вторых, непонятно с чего ты взял что памяти требуется больше? Тут в общем-то чем серьёзней задача, тем меньше разница.

Добавлено через 1 минуту и 46 секунд
P.S. топикстартер вообще исчез, так что закончим на этом оффтопик.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила раздела "Философия программирования":
Се ля ви

Форум "Философия программирования" предназначен для обсуждения вопросов, так или иначе связанных с философскими аспектами разработки ПО:

• вопросы перспективного развития методов написания ПО;

• изменяющиеся языки и методологии программирования;


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Философия программирования | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.