Здравствуйте, eskimo82, Вы писали:
CC>>Рассматривать реализацию в отрыве от ОС просто не имеет смысла.
E>C++ традиционно не привязан к какой либо ОС.
Подкапотные детали рантайма — привязаны.
CC>>Ещё раз, у нас это вообще то уже лет пять назад работало в production.
E>То что это как-то работало в момент написания — нет сомнений. Более интересный вопрос — а сейчас то работает ? Если пересобрать другой версией компилятора — будет работать ?
Версии DDK меняли один раз, когда W2012 вышла. Работало.
E>>>Что касается gcc то там С++ исключения реализованы по другому. Поэтому ты не сможеш просто-так собрать модуль ядра с поддержкой исключений.
CC>>Кстати, а чем же так отличается GCC реализация что в линуксовом кернеле её нельзя использовать для бросания исключений внутри модуля?
E>Надо писать собственную реализацию раскрутки стека. Учитывая то, что ABI С++ постоянно нестабилен (как в винде, так и в линуксах), то поддержка этого кода для разных версий gcc становится проблемой. В тех же виндах стековый фрейм с информацией о catch меняется от версии к версии — каике-то поля добавляются, какие-то исчезают.
Не надо, она уже написана микрософтом и не менялась почти лет 10 как.
В Win x64 больше нет стековых фреймов для exceptions:
http://msdn.microsoft.com/en-us/library/8ydc79k6.aspx
Там же кстати можно покликать на версию студии и убедиться что никакой разницы нету.
E>Вторая проблема, как я уже говорил, состоит в сопряжении уже существующего сишного кода с исключениями. Сишные код не предполагает что точка возврата может произойти в любом месте, и поэтому в нем изначально нет никакой exception-safety.
У нас нет сишного кода. Что за код вызывает нас — нас не интересует, потому как любые исключения из нашего модуля мы не выпускаем, ибо будет гарантированный бадабум.
E>>> Более того, если ты вдруг собереш свой приплюсный виндово-ядровый код другим компилятором, или даже другой версией студии у тебя будет масса интересных сюрпризов.
CC>>В винде драйвера собираются с помощью DDK, там вообще свой компилятор идёт в комплекте.
E>Это компилятор С++ ? Он развивается ? У него одна единственая версия ?
Да, да, нет.
E>>> Ты вообще соображаеш какую говнояму ты таким образом выкапываеш для дальнейшей поддержки твоего кода ?
CC>>Я прекрасно понимаю как оно внутри работает. 4 года поддерживали, никаких проблем.
E>А 10 лет сможете поддерживать?
Лехко. Впрочем тот проект уже закрыт ибо нас купила не MS.
E>>>Ты даже не понял о чем я говорю.
CC>>Про макросы.
E>Про макросы, но про немного другие макросы, чем ты себе представляеш.
Те макросы определяются не через #define?
E>>>И, пока ты там не появился, весь в белом и на коне, ничего взлететь не могло. Ага, унылый сказочник.
CC>>Нет, я занимался другими вещами, попутно наблюдая за их танцами с саблями.
E>Т.е. ты не знаком с деталями танцев, а делаеш вывод глядя со стороны ? 
Ещё как знаком, ибо дебажил код с результатами их трудов.
CC>>Имеенно тогда увидел его уродливость С++. С++-кривое, уродливое безобразие.
E>Он пишет про уродливость (в каком-то его понимании), а не про то, что язык плохой.
Т.е. "кривое, уродливое безобразие" означает что язык хороший?
E>>>Ты опять мешаеш всё в кучу, толи по глупости, толи из-за не понимания. Аксес виолайшен — это SEH исключение, оно из более низкого уровня абстракции. В языке С++ нет никаких access violation.
CC>>Ты ж сам только что писал что в винде вся исплементация рантайма для исключений сделана через SEH, забыл? Поэтому что SEH что С++ исключение в ядре суть одно и то же, только с разными параметрами.
E>Нет. Ты допускаеш грубую ошибку — путая уровни абстракции — либо ты пишеш на С++ и не знаеш ни о каких access violation, либо ты пишеш на каком-то другом, своем собственном, языке.
Я системщик. Для меня "уровни абстракции" которые надо учитывать и использовать простираются вплоть до железа. Поэтому знать обо всём что происходит неявно — моя прямая обязанность.
E>Это тоже самое, например, что в коде на С++ исилено использовать низкоуровневые функции Си, с соответсвующими следствиями.
Что такое "низкоуровневые функции Си" и почему это их вдруг нельзя вызывать?
E>А вот сгенерированые фреймы имеют кучу различных версий свой структуры.
Судя по докам они с VS2005 не менялись.
CC>>>>Можно прикрутить RTTI, можно сделать свои классы с блекджеком и всем что к нему прилагается.
E>>>Тебе это придется делать в любом случае — что бы понять что за исключение ты поймал и надо ли продолжать раскрутку стека.
CC>>__except позволяет решать этот вопрос без RTTI.
E>Этот вариант даже еще хуже чем собственый unwind. В первом случае — у тебя хотя бы весь бойлерплайтный код вынесен в одно место.
Я тебе дал два варианта: вернуть RTTI или сделать через except если твоему коду достаточно всё ловить через аналог catch(...)
E>>>Ты хоть понимаеш сколько малокоректного говнокда из полухаков это стоит ? Такое достойно только зеленого юнца воображающего себя кулхацкером. На самом деле — это даже не смех, а сплошные слезы глядя на этого горе-кулхакера.
CC>>На сколько поинтов выросло твоё ЧСВ при написании этой фразы?
E>Ни на сколько, просто констатирую факт.
Не надо ложной скромности!
E>>>Нормальным разработчикам.
CC>>Под нормальным разработчиком ты явно понимаешь себя.
CC>>+100 к ЧСВ? 
Значит угадал.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока