![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Есть у меня преподаватель, с легкой руки которого мы здесь на нескольких листах рассуждали о строках в С++
НА очереди исключения... Ссылаясь на интервью Хейлсберга - автора С#(правда, я их не нашел), были даны принципы использования исключений, не нарушающих принципы структурного программирования: 1. Все исключения должны иметь общий базовый класс 2. Объекты исключений должны располагаться в динам. памяти. Это камень в сторону С++. Таким образом мы не можем сказать, откуда в общем случае пришло исключение. + многократное копирование по стеку при раскрутке (есть в Страуструпе) 3. В объекте должна быть ссылка на предыдущее исключение в контексте которого возникла данная (так сделано в .NET только c Frammework 2.0 ) 4. Использование исключений для управления ходом работы проги зарещено. (у Страуструпа есть и намеки на такое нецелевое использование) 5. Касается того, что все таки объекты должны быть только динамические -> слова по поводу try... finally (уже обсуждали) 6. Обработка исключений с поглощением допустима лишь на самом верхнем уровне (сюда цикл обработки сообщений и т.д) Скажу так: препод этот очень грамотный, работает как раз на С++, в Check Point (который делает Zone Alarm и т.д.) Т.е. в компетентности его сомневаться не приходится. Но сам он дельфист. В общем, хотелось бы услышать ваше мнение, дорогие форумчане ![]() СУВ, Kuvaldis Это сообщение отредактировал(а) Kuvaldis - 11.1.2008, 11:22 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
archimed7592 |
|
||||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Ыыыы, стрелять этих Дельфистов надо...
![]() Ну давай поговорим ![]() Угу... Должны... std::exception для того и сделан(а также несколько классов std::logic_error, std::domain_error и т.д.)... И тем не менее, страна свободная, свобода слова и т.п. - никто не мешает тебе бросить int или char * или объект пользовательского типа, не являющегося наследником std::exception. 1. Зачем? Ну будут они в "динамической памяти"(она что, чем-то отличается? 0_о) - что изменится? 2. Многократных копирований реализации имеют право избегать и, поверь, они именно так и поступают. 3. Копирования не избежать, если написано catch(MyException e){ ... }, но что мешает написать catch(const MyException &e){ ... }(опять же свобода программерского слова - хочет копирований пишет так, не хочет - пишет "нормально")?
А можно пример для тупых и, желательно на пальцах что это такое и зачем это нужно, потому что я могу бросить исключение просто так(потому что мне не понравился нулевой указатель, к примеру) - куда будет ссылаться такая "ссылка на предыдущее исключение"?
Согласен... И тем не менее, в .NET'е они используются для того, чтобы прервать поток, к примеру ![]() Утверждение в общем случае хорошее, но, оно применимо к любому языку, ибо ни один язык не может запретить пользоваться тебе исключениями вместо if'а.
finally? С++ имеет семантику автоматический объектов и, посему finally ему не нужен по определению(RAII).
Крайне неверное утверждение. Ошибка должна обрабатываться в том месте, которое умеет эту ошибку обрабатывать(читай в том месте, которое знает что с ней делать), не раньше и не позже. Примеры приводить нужно? В его авторитете я не сомневаюсь, также, как и не сомневаюсь в том, что отсутствие в языке семантики автоматических объектов(как класса вообще), отсутствие понятия константности объекта, отсутствие статических инструментов(всё в run-time), а также, наличие сборщика мусора(относится к джава-дотнетам) проедает мозг, накладывает отпечаток и т.д., так что в компетентности Дельфистов относительно устройства языка С++(а точнее того, что они хотели бы сделать из С++) я сомневаюсь ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||||
|
|||||||||
Kuvaldis |
|
||||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
archimed7592,
Честно говоря, я это и хотел в интервью найти, но не нашел. :( Не знаю, просветить не успели, так как пара закончилась Но эту фичу можно и не юзать (ссылка 0 )
имелось в виду throw; // повторная генерация -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
||||
|
|||||
marcusmae |
|
||||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Нда, это в целом очень напоминает .NET-овые исключения : базовый класс Exception, исключения хранят ссылки на дерево вложенных исключений, приведших к данному, хранят трассу вызовов, в связи с чем не очень понятно утверждение о том, что
помимо это специализируются (например, ArgumentException в числе прочего указывает на имя аргумента). С одной стороны, подход грамотный при разработке больших и/или устойчивых, защищённых программ. Надстройка над C#, SpeC# форсирует проработку исключений введением контрактов на вызовы, например :
С другой стороны, невполне ясно, какое это может найти выражение в плюсах, где исключения есть, но их поддержка намного слабее.
Хм, а по-моему, практикуется. Допустим, если какой-то catch-блок несумел обработать исключение, то он пробрасывает его вверх более общим обработчикам, а если сумел, то "проглотил" ошибку, и программа поехала себе дальше. Чем не управление? Добавлено через 14 минут и 29 секунд Ха-ха ![]() Не считаю свой мозг совсем уж проеденым, все больше и больше отхожу от .NET к плюсам, и чувствую себя в них намного комфортнее ![]() Это сообщение отредактировал(а) marcusmae - 28.10.2007, 23:48 -------------------- ἀπὸ μηχανῆς θεός |
||||||
|
|||||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Иногда бывает так, что хрен поймешь как ошибку обрабатывать, как например обработать ошибку доступа. Такие ошибки приводят к тому что программа падает, причем у клиента. А система обработки исключений, в этом случае должна помочь разработчикам сего глюкалова понять из-за чего это происходит, т-есть получить информацию о контексте выполнения программы в этот момент. |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Да чего юзать или нет это вопрос десятый ![]() Я не понимаю зачем нужна ссылка на какое-то мифическое предыдущее исключение(по какому принципу они хоть упорядычиваются? какое предыдущее, а какое следующее? ![]() Гхм... Опять я тебя не понимаю: давай на пальцах, что подразумевалось под исходным утверждением и при чём здесь rethrow?
А можно конструктивно: что понимается под слабой поддержкой исключений и чем С++ в этом плане слабже .net'а? Ну, скажем, в том же .net "мощная система исключений" позволяет полностью узнать контекст, IIRC, только в отладочном режиме. Опять же, что понимается под "должна помочь разработчикам сего глюкалова понять из-за чего это происходит, т-есть получить информацию о контексте выполнения программы в этот момент." - на пальцах(на примерах). -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
я ни в коем случае не сторонник .NET но мне кажется управляемый код априорно более гибок (но не быстр естественно) во всех отношениях (и в плане исключений в частности) динамическое формирование кода, перекомпиляция в run-time и все такое -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Типа, отмазался ![]()
В априоре гибком коде возможно RAII? Или может быть там возможны такие же мощные(читай compile-time) шаблоны? Список можно продолжить ![]() Рефлексия? Да ну её... Ну вот ты хоть раз динамически чего-нибудь формировал? ![]() Речь про JIT? А в чём плюсы этого подхода(кроме мифической кроссплатформенности)? -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
griker |
|
|||
![]() MDMA ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 14.7.2006 Где: Tallinn Репутация: нет Всего: 8 |
Да ладно чуваки... Расслабтесь посмотрите какой - нибудь фильм... А потом на свежую голову сядете за комп
-------------------- I don't respect police |
|||
|
||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
нет, не только в кроссплатформенности допустим есть некоторый код, который постоянно выполняется (какой-нибудь сервер) виртуальная машина (CLR, JRE) в зависимости от внешних факторов (например какая-либо ветвь кода выполняется только в 5% всех случаев) может перекомпилировать (=оптимизировать) код с их учетом
ну согласись, это тоже не аргумент я лично вообще особо с .NET/Java не работал, с Reflection тем более но это же не означает, что она бесполезна
опять таки, в С++ compile-time шаблоны, в .NET run-time и что? это ортогональные понятия с другой стороны, модифицировав компилятор какого-либо языка .NET, можно получить те же мощные compile-time шаблоны а вот обратное не верно (т. е какую-либо фишку .NET легко портировать в С++) что я так .NET защищаю ![]() ![]() Добавлено через 4 минуты и 8 секунд кроссплатформенность то настоящая тут просто много других причин (это про .NET) ну а Java реально кроссплатформенна -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Опять же - мифическая возможность ![]() Реальные JIT'ы так делают? Сомневаюсь.
Ну почти бесполезна ![]() Она помогает, дизайнеру, к примеру, узнать какие есть свойства у компонента(пользовательского). Мы где-то на исходниках холиварили на тему применимости рефлексии - ничего убедительного в пользу рефлексии сказанно не было.
Опять таки: ты знаком с тем, как реализуются run-time шаблоны в .net? ![]() По идее, то же самое можно сделать в С++ с помощью интерфейсов и обыновенных(нешаблонных) классов ![]() Добавлено через 2 минуты и 35 секунд griker, ты по моему перепутал тематику с флеймом.
Хорошо, С++ тоже кроссплатформеный ![]() ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
я слышал от компетентного источника, что JVM так делает ничего другого сказать не могу вообще мы говорим о реализациях концепции управляемого кода или о самой концепции? ![]() тут надо какого-нибудь авторитетного человека, который хорошо знаком с .NET например Aldan Добавлено через 2 минуты и 10 секунд
![]() только типы кроссплатформенности разные Это сообщение отредактировал(а) MAKCim - 29.10.2007, 10:51 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Я бы хотел напомнить что тема называется: Поговорим про исключения
Видел когданибудь в ХР окошко с сообщением: "Программа выполнила недопустимую инструкцию и будет закрыта, бла-бла-бла..." - так-вот это поведение по умолчанию при возникновении необработанного исключения, и его можно переопределить. Например можно предложить пользователю послать отчет об ошибке разработчикам. |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Да что там - Макс главный флудогон этого раздела ![]() Видел. К чему всё это? К тому что бывают исключения про которые "забыли"? И то, что в этом случае помогут ссылки на "предыдущие" исключения? Хорошо, допустим... Осталось понять как они помогут и по какому принципу они предыдущие и следующие? -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
а никто и не забывал, высказывайтесь ![]() конструктивный спор, логически связанный с предметом основного обсуждения, вполне уместен Это сообщение отредактировал(а) MAKCim - 29.10.2007, 11:43 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |