Форум: "Прочее";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Внизdelphi = pascal = языки для начинающих Найти похожие ветки
← →
Reindeer Moss Eater © (2007-11-14 17:46) [120]Человеку дали великолепный механизм обработки исключений - и он от него отказался...
Ага. Исключения стали воспринимать как ошибки от которых надо избавляться.
← →
Romkin © (2007-11-14 17:46) [121]
> из всех нетривиальных методов(где стоит перехват исключений)
> возвращаю булевый код успеха. А по какой причине операция
> не выполнилась пользователя очень редко интересует, его
> интересует общий результат(Да/Нет). А лог ошибки поможет
> уже мне понять что у него на самом деле произошло.
Слушай, ты с Аксаптой, случайно, не работаешь? А то у меня друг ее администрит. И типовая ситуация - звонок "У нас терминал никак весы не найдет!" Шлют логи. Он перезванивает: "Сволочи, включите весы!!!"
Сейчас он их просто пингует, благо сетевые.
← →
Канадец (2007-11-14 17:47) [122]
> DiamondShark © (14.11.07 17:42) [118]
> Во-первых, это библиотечные штучки, а речь идёт о языке.
STL это неотъемлемая часть языка С++.
> Те же яйца, вид сбоку.
Поэтому я и написал "Это не совсем верно"
← →
Черный Шаман (2007-11-14 17:47) [123]
> pasha_golub © (14.11.07 17:31) [111]
> А пользователю можно показать красивую мордашку, мол не
> волнуйтесь, уважаемый. У нас тут внутре неонка барахлит,
> так шо мы тут лог запишем, туда положим, а вы будьте добры
> по этому адресу его отправьте. И будет юзер довольный аки
> слон. Надеюсь :)
А создатели FF про это и не знали, поэтому они все некритические ошибки выводят во внутреннюю консоль, а не на экран.
← →
mephasm (2007-11-14 17:48) [124]DiamondShark © (14.11.07 17:39) [115]
>Во-вторых, а что такое auto_ptr и shared_ptr? Экземпляры на стеке, в которые завёрнуты ссылки.
Вы забыли о вызове деструкторов полей объекта.
← →
Игорь Шевченко © (2007-11-14 17:48) [125]Romkin © (14.11.07 17:29) [109]
Исключение плохо тем, что его обработка нарушает простой и естественный ход программы. Также, как goto.
К тому же (это уже личное, наболевшее), с логикой, построенной на исключениях совершенно невозможно отлаживаться в среде, потому что нажатие кнопки F8 автоматически перемещает в то место, где возникло такое вот "логическое" исключение. И задавить его в среде тоже нельзя, потому что чать исключений такой класса нужно действительно обрабатывать, как исключения.
← →
Piter © (2007-11-14 17:50) [126]@!!ex © (14.11.07 17:19) [103]
Хм. в дельфе я всегда знаю, в какой момент будет удален объект
серьезно что ли? И в какой же момент?
Я то думал, что объект будет удален исключительно тогда, когда будет вызван деструктор объекта. Не раньше и не позже.
Точно также ресурсы можно освободить по вызову метода.
← →
Reindeer Moss Eater © (2007-11-14 17:52) [127]Исключение плохо тем, что его обработка нарушает простой и естественный ход программы. Также, как goto.
Ну if и case тоже нарушают простой ход программы.
Кроме того, исключение это совсем не goto куда-то там, а гоуту во вполне определенное место.
← →
Игорь Шевченко © (2007-11-14 17:54) [128]
> Ну if и case тоже нарушают простой ход программы.
if и case как раз не нарушают.
← →
Reindeer Moss Eater © (2007-11-14 17:58) [129]возбужденные исключения тоже не нарушают.
возвращаемся по стеку к месту вызова и все.
это не гоуту, это ранний возврат
← →
homm © (2007-11-14 17:59) [130]> [127] Reindeer Moss Eater © (14.11.07 17:52)
> Кроме того, исключение это совсем не goto куда-то там, а
> гоуту во вполне определенное место.
А у Вас гото всегда ведет кудато - там?
← →
Reindeer Moss Eater © (2007-11-14 18:02) [131]у меня вообще нет goto
← →
J_f_S (2007-11-14 18:03) [132]
> А у Вас гото всегда ведет кудато - там?
Гото может вести куда-то туда. Исключения всегда корректно раскручивают стек.
← →
Palladin © (2007-11-14 18:03) [133]
> Reindeer Moss Eater © (14.11.07 17:52) [127]
стоп стоп... if и case не могут вывести процесс исполнения на шаг, алгоритмически стоящий, выше текущего... именно это и является "нарушением простого и естественного хода программы"... потому то дополнительные конструкции continue и break не являются "злом"...
← →
Reindeer Moss Eater © (2007-11-14 18:05) [134]if condition then exit;
if condition then abort;
if condition then raise;
одно и то же.
но в последнем случае еще и некий workaround выполняется в виде показа мессаджа.
← →
Черный Шаман (2007-11-14 18:05) [135]
> Romkin © (14.11.07 17:46) [121]
>
>
> > из всех нетривиальных методов(где стоит перехват исключений)
> > возвращаю булевый код успеха. А по какой причине операция
> > не выполнилась пользователя очень редко интересует, его
> > интересует общий результат(Да/Нет). А лог ошибки поможет
> > уже мне понять что у него на самом деле произошло.
>
> Слушай, ты с Аксаптой, случайно, не работаешь? А то у меня
> друг ее администрит. И типовая ситуация - звонок "У нас
> терминал никак весы не найдет!" Шлют логи. Он перезванивает:
> "Сволочи, включите весы!!!"
> Сейчас он их просто пингует, благо сетевые.
>
А как бы пользователю помог бы показ этих ошибок, которые совсем не мешают работе программы? Код старый, не мною писаный, который проще завернуть чем переделывать. Да и времени нет, аналог Aero нужно делать для полустеклянного интерфейса.
21.10.2007 20:27:27:984||TVMListView.SetItem List index out of bounds (0)
21.10.2007 20:27:27:984||TLoadIconsThreadObject.UpdateIcon List index out of bounds (0)
22.10.2007 02:46:11:046||TFileListView.StartMonitorChanges Length(PathList.PIDLs)<=0 TFileListView.StartMonitorChanges
22.10.2007 02:46:11:062||TVMListView.SetItem Access violation at address 0041CBB9 in module "VistaStartMenu.exe". Read of address 00000008
22.10.2007 02:46:11:062||TFileListView.BuildItemsList Access violation at address 0041CBB9 in module "VistaStartMenu.exe". Read of address 00000008
22.10.2007 02:46:11:062||TVMListView.GetItem Access violation at address 0041CBB9 in module "VistaStartMenu.exe". Read of address 00000008
22.10.2007 02:46:11:062||TVMListView.PlaceItems Access violation at address 0041CBB9 in module "VistaStartMenu.exe". Read of address 00000008
22.10.2007 02:46:11:062||TPupupListView.ContinunePopup Access violation at address 00000000. Read of address 00000000
22.10.2007 02:46:11:062||TVMListView.GetItem Access violation at address 0041CBB9 in module "VistaStartMenu.exe". Read of address 00000008
22.10.2007 02:46:11:062||TLoadIconsThreadObject.UpdateIconsForListView Access violation at address 0041CBB9 in module "VistaStartMenu.exe". Read of address 00000008
← →
Reindeer Moss Eater © (2007-11-14 18:08) [136]Черный Шаман
так кроме шоумессаджа в блоке обработки можно и более полезный код писать.
← →
DiamondShark © (2007-11-14 18:09) [137]
> mephasm (14.11.07 17:48) [124]
> Вы забыли о вызове деструкторов полей объекта.
Точно, спасибо.
Но в данном случае непринципиально. Аналогов нет ни в Дельфи, ни, тем более, в жабе.
> Piter © (14.11.07 17:50) [126]
> Точно также ресурсы можно освободить по вызову метода.
Не, смотри. Пусть у нас есть контейнер, умеющий работать с каким-то абстрактным классом (вроде дельфийского TObjectList). Контейнер нифига не знает о том, используют ли содержащиеся в нём классы какие-либо ресурсы. Теперь мы напихаем в этот контейнер смесь экземпляров использующих и неиспользующих ресурсы, и отнимем возможность вызвать виртуальный деструктор.
Вот эта ситуация Зотова и пугает.
Зачем Зотову понадобилось пихать в обобщённый контейнер такую смесь -- он ни за что не признается. С разработчика контейнера взятки гладки. А вот пользователь контейнера прекрасно осведомлён о свойствах контейнера и тех объектов, которые он собственноручно туда положил, но "продолжал грызть кактус".
А виноват, конечно, язык.
← →
Черный Шаман (2007-11-14 18:09) [138]
> Reindeer Moss Eater © (14.11.07 18:08) [136]
>
> Черный Шаман
>
> так кроме шоумессаджа в блоке обработки можно и более полезный
> код писать.
Он там есть, но зачем он пользователю?
← →
NX (2007-11-14 18:12) [139]Всякий раз, когда говорю о том что программирую на Делфи, то почему-то у всех сразу становятся кислые рожи, как будто это язык лунатиков, почему?
← →
Reindeer Moss Eater © (2007-11-14 18:15) [140]Он там есть, но зачем он пользователю?
Нормальный и полезный блок обработки выглядит чуть менее примитивно.
А именно:
on E : Что-то там do молча иисправляем что-то там
on E : Что-то там еще do молча иисправляем что-то там еще
...
в остальных случаях показываем сообщение
← →
J_f_S (2007-11-14 18:16) [141]
> Черный Шаман (14.11.07 18:09) [138]
> > Reindeer Moss Eater © (14.11.07 18:08) [136]
> >
> > Черный Шаман
> > так кроме шоумессаджа в блоке обработки можно и более
> полезный
> > код писать.
> Он там есть, но зачем он пользователю?
Действительно, зачем пользователю стабильные отказоустойчивые приложения?
← →
Reindeer Moss Eater © (2007-11-14 18:18) [142]Действительно, зачем пользователю стабильные отказоустойчивые приложения?
Отказоустойчивость - это подавленные диагностические сообщения???
Превед!
← →
Игорь Шевченко © (2007-11-14 18:20) [143]NX (14.11.07 18:12) [139]
Смени круг общения.
Reindeer Moss Eater © (14.11.07 17:58) [129]
> возбужденные исключения тоже не нарушают.
> возвращаемся по стеку к месту вызова и все.
> это не гоуту, это ранний возврат
Дабы пояснить иллюстрацией:
Имеет код:
try
try
if SomeBadCondition then
raise Exception1.Create (...)
.....
if SomeAnotherBadCondition then
raise Exception2.Create (...)
except
on E: Exception1 do
begin
.....
end;
on E: Exception2 do
begin
.....
raise Exception.Create (...+E.Message);
end;
on E: Exception do
begin
.....
end;
end;
.....
except
on E: Exception do
begin
.......
end;
end;
Писать лень, но этот кусок может быть обернут еще в несколько try...except, try..finally
Если кто-то скажет, что ход исполнения программы можно легко и просто проследить, значит мне пора на свалку истории.
← →
J_f_S (2007-11-14 18:22) [144]
> Отказоустойчивость - это подавленные диагностические сообщения?
> ??
Я не про подавленные мессаджи, а про код обработки ошибок, конечно.
← →
Reindeer Moss Eater © (2007-11-14 18:22) [145]Если кто-то скажет, что ход исполнения программы можно легко и просто проследить, значит мне пора на свалку истории.
Вообще да согласен, но это из серии "Корявый код можно нарисовать на любом языке"
← →
Azize © (2007-11-14 18:24) [146]По сабжу
Исходя из логики препода
java=C=C++=MSV C++=MSV=MSV Basic = Basic = Фуфло pascal и то лучше
)))
← →
Игорь Шевченко © (2007-11-14 18:25) [147]Reindeer Moss Eater © (14.11.07 18:22) [145]
> Вообще да согласен, но это из серии "Корявый код можно нарисовать
> на любом языке"
А идеи по выпрямлению есть ? :)
← →
Reindeer Moss Eater © (2007-11-14 18:30) [148]try
if SomeBadCondition then
raise Exception1.Create (...)
Вообще это клиника конечно. Обычно один программер возбуждает исключения для другого программера и т.д.
То есть автор компонента/библиотеки - пользователю библиотеки.
Но что бы самому себе?
← →
Reindeer Moss Eater © (2007-11-14 18:31) [149]Именно в таком виде
← →
Azize © (2007-11-14 18:32) [150]
> java=C=C++=MSV C++=MSV=MSV Basic = Basic = Фуфло pascal
> и то лучше
вернее
java=C=C++=MSV C++=MSVS=MSV Basic = Basic = Фуфло pascal
← →
@!!ex © (2007-11-14 18:47) [151]> а зачем это знать?
А когда освобождать ресурсы?
> серьезно что ли? И в какой же момент?
В момент вызова дескуртора.
> Я то думал, что объект будет удален исключительно тогда,
> когда будет вызван деструктор объекта. Не раньше и не позже.
>
> Точно также ресурсы можно освободить по вызову метода.
По вызову какого метода????
Какой метод ява вызывает при удалении объекта????
← →
Плохиш © (2007-11-14 18:47) [152]
> Reindeer Moss Eater © (14.11.07 18:05) [134]
> if condition then exit;
>
> if condition then abort;
>
> одно и то же.
да шо ви говорите?
← →
Piter © (2007-11-14 18:51) [153]@!!ex © (14.11.07 18:47) [151]
Какой метод ява вызывает при удалении объекта????
а какой метод Delphi вызывает при удалении объекта?
← →
@!!ex © (2007-11-14 18:53) [154]> [153] Piter © (14.11.07 18:51)
А его вызываю я, когда МНЕ это нужно.
На дельфи:
есть ресурсы, которые мне надо освободить при релизе объекта.
Я тупо освобождаю ресурсы в деструкторе.
на яве:
есть ресурсы, которые мне надо освободить при релизе объекта.
где я должен их освобождать? ОТдельный метод? Так вызов этого метода никак не связан с релизом объекта.
← →
Virgo_Style © (2007-11-14 18:55) [155]Насколько я себе уяснил, зло прежде всего в том, что освобождать объект на Delphi - это нерушимое правило, и делается это заранее условленными методами.
Для Java же предполагается, что все случится автоматически, а лично я, признаться, справку читаю только тогда, когда мне что-то становится неясно, и боюсь, что не я один... а ресурсы-то потекут, поскольку о том, что надо вызывать еще что-то, я попросту не буду знать.
Конечно, я в этом случае буду сам себе злобный буратино, но для чего лишать разработчика возможности снизить чужую буратинистость?
← →
Черный Шаман (2007-11-14 18:59) [156]
> Reindeer Moss Eater © (14.11.07 18:05) [134]
>
> if condition then exit;
>
> if condition then abort;
>
> if condition then raise;
>
> одно и то же.
>
> но в последнем случае еще и некий workaround выполняется
> в виде показа мессаджа.
Exception можно использовать только для выхода из нескольких вложенных вызовов методов, а если нужен выход из одного текущего вызова метода, то намного удобнее Exit и вернуть логический статус выполнения операции.
← →
pasha_golub © (2007-11-14 19:00) [157]
> Reindeer Moss Eater © (14.11.07 18:30) [148]
>
> try
> if SomeBadCondition then
> raise Exception1.Create (...)
>
> Вообще это клиника конечно. Обычно один программер возбуждает
> исключения для другого программера и т.д.
>
Поддерживаю оратора. Но самому себе тоже можно. В другой, например, функции, которая будет вызвана.
2ИШ
То что отлаживать с excption"ами иногда муторно, я согласен. Но зато, получили Exception, тут же выкинуло нас в код, жмакаем Ctrl+Alt+S и имеем стек откуда шо пришло. А в ином случае, пришлось бы по F7 спускаться самим.
← →
DiamondShark © (2007-11-14 19:01) [158]
> @!!ex © (14.11.07 18:47) [151]
> > а зачем это знать?
>
> А когда освобождать ресурсы?
Удаление объекта и освобождение ресурсов -- это разные операции.
> По вызову какого метода????
> Какой метод ява вызывает при удалении объекта????
При удалении объекта ява вызывает метод finalize(). Но это не важно. Она могла бы не вызывать вообще никакого метода. Это нисколько не мешает освобождать ресурсы.
← →
@!!ex © (2007-11-14 19:01) [159]Эксцепшены очень клевая штука на стадии разработки проекта.
← →
@!!ex © (2007-11-14 19:03) [160]Когда художнику отдаешь ехешку.
он ее вставляет в проект, а она не запускается... отчегО?
От того что файл не найден!
Не вопрос, сейчас отдам.
А не было бы эксцепшена?
ехешка не запускается...
почему? а я х.з...
пришлите лог пожалуйста?
муторно...
кто будет туда сюда логи таскать?
Страницы: 1 2 3 4 5 6 7 8 9
10 11 вся ветка
Форум: "Прочее";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Память: 0.83 MB
Время: 0.098 c