Здравствуйте, eskimo82, Вы писали:
E>Как я понял из соседнего разговора — ты все смешал в кучу и не понимаеш, что SEH и плюсовые исключения — это совершенно разные вещи
E>хотя, конкретно в виндах у микрософтовского компилятора С++ исключения реализуются на базе SEH.
Напомню: мы вели разговор о практической примененимости С++ в ядре, что требует тесной интеграции с предоставляемым ОС функционалом. В винде такой функционал позволяет использовать С++ исключения в ядре, т.к. исключения виндовые компиляторы традиционно раелизуют через SEH.
Рассматривать реализацию в отрыве от ОС просто не имеет смысла.
E> Причем, чтобы это работало, внутри ядра должн быть закреплен фильтр SEH из userspace runtime который знает про формат сгенерированных твой любимой студией стековых фреймов.
Userspace тут вообще ни при делах, в DDK свой рантайм и свой компилятор. Драйвера собираются им.
E> А надо сказать, этот формат для разных студий отличается.
Да всё равно, unwind производится кодом этого же модуля, исключения наружу выпускать нельзя — будет совершенно законный BSOD.
E> Ты хоть понимаеш каким диким говнокодом тебе придется осуществлять поддержку ++ ?
Ещё раз, у нас это вообще то уже лет пять назад работало в production.
E>Что касается gcc то там С++ исключения реализованы по другому. Поэтому ты не сможеш просто-так собрать модуль ядра с поддержкой исключений.
Кстати, а чем же так отличается GCC реализация что в линуксовом кернеле её нельзя использовать для бросания исключений внутри модуля?
E> Более того, если ты вдруг собереш свой приплюсный виндово-ядровый код другим компилятором, или даже другой версией студии у тебя будет масса интересных сюрпризов.
В винде драйвера собираются с помощью DDK, там вообще свой компилятор идёт в комплекте.
E> Ты вообще соображаеш какую говнояму ты таким образом выкапываеш для дальнейшей поддержки твоего кода ?
Я прекрасно понимаю как оно внутри работает. 4 года поддерживали, никаких проблем.
E>Ты даже не понял о чем я говорю. 
Про макросы.
CC>>Я в тот проект пришёл когда там линуксоиды со стажем все свои макросы уже написали. И занимались увлекательным делом — пытались с этим всем взлететь.
E>И, пока ты там не появился, весь в белом и на коне, ничего взлететь не могло. Ага, унылый сказочник.
Нет, я занимался другими вещами, попутно наблюдая за их танцами с саблями.
E>>>Ты просто не умееш с ними работать.
CC>>Можно я буду так отвечать всем, кто кричит что С++ плохой?
E>А кто-то кричит что С++ плохой?
Ну вот например недалеко товарищ пишет:
Имеенно тогда увидел его уродливость С++. С++-кривое, уродливое безобразие.
E>Ты опять мешаеш всё в кучу, толи по глупости, толи из-за не понимания. Аксес виолайшен — это SEH исключение, оно из более низкого уровня абстракции. В языке С++ нет никаких access violation.
Ты ж сам только что писал что в винде вся исплементация рантайма для исключений сделана через SEH, забыл? Поэтому что SEH что С++ исключение в ядре суть одно и то же, только с разными параметрами.
E>_CxxThrowException — это функция из рантайма С++ предназначена для выполнения в user space mode.
Если пишешь в кернеле — там свой рантайм.
E>RtlRaiseException — это опять же функция рантайма (но уже системного) и она предназначена для выполнения в user space mode.
ZwRaiseException. Писал по памяти.
E>При этом у С++ исключений есть специальный идентификатор, по которому его внутри фильтра можно отличить и разобрать фрейм сгенерированой студией.
В случае когда пишешь драйвер используется компилятор и его либы из DDK. Сама студия уже особой роли не играет.
CC>>Можно прикрутить RTTI, можно сделать свои классы с блекджеком и всем что к нему прилагается.
E>Тебе это придется делать в любом случае — что бы понять что за исключение ты поймал и надо ли продолжать раскрутку стека.
__except позволяет решать этот вопрос без RTTI.
E>Ты хоть понимаеш сколько малокоректного говнокда из полухаков это стоит ? Такое достойно только зеленого юнца воображающего себя кулхацкером. На самом деле — это даже не смех, а сплошные слезы глядя на этого горе-кулхакера.
На сколько поинтов выросло твоё ЧСВ при написании этой фразы?
E>>>Особбенно совмещение неопределенных точек возврата с сишным кодом ядра.
CC>>Не понял про что ты?
E>У сишного кода есть четко обозначеные точки возврата "наверх". Использование исключений дает неопределенныые точки возврата — раскрутка стека может произойти в любом месте. Сишный код такого эээ несколько не ожидает.
Ещё раз, исключение не должно покинуть модуль.
E>Для начала тебе надо самому понять почему так, как ты описал выше, делать нельзя. К сожалению, ты неквалифицирован.
+10 к ЧСВ?
E>Потому что в винде — это хак
Т.е. решение использовать готовый и прекрасно работающий системный механизм исключений для реализации поддержки языковых исключений в рантайме это хак?
Ах ну да, надо было написать свой, ни с чем не совместимый.
E>в основе которого лежит использование того факта, что один единственый компилятор поддерживает механизм С++ исключений на основе системного механизма SEH.
В линуксе же таких возможностей и вовсе нету.
E>Это у тебя руки из задницы.
+10 к ЧСВ?
E>Нормальным разработчикам.
Под нормальным разработчиком ты явно понимаешь себя.
+100 к ЧСВ?
CC>>Дада, она уже чёрти сколько лет вот вот помрёт. Осталось подождать ещё совсем немного.
E>А помрет она из-за таких вот горе-программистов.
Что то всё никак не помирает, что мы делаем не так?
Забанили по IP, значит пора закрыть эту страницу.
Всем пока