Re[11]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 06.09.14 21:22
Оценка:
Здравствуйте, 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, значит пора закрыть эту страницу.
Всем пока
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.