М>>А какие еще существующие сегодня ОС, кроме макос (и то, только в IOKit) используют С++ в драйверах? CC>Да так же винда
Фи. Все думали щас он возьмет и вытащит из за запазухи голубя. Ну чудо не случилось и вытащил он дырявые носки.
С Вендой тут все очень не просто, т.к. она имплементирует исключения C++ через свой ядровый SEH.
А это значит, что писать можно только с компилятором C++ поддерживающим конкретно эту имплементацию, другой компилятор, например с sjlj, или более быстрым dwarf уже не подойдет...
И этот человек еще что-то проповедловал про замену рантайма
E>>Чувак, ты перепутал в кучу разные сущности и уровни. И все только из-за с виду одного catch, а на самом деле это совершенно разные catch. CC>Зависит от того как ты реализуешь под капотом.
Ты конечно можеш сделать людей подмножеством коней, как это сделала микрософт. Но это совершенно не значит, что это одинаковый сущности на одном и том же уровне абстракции.
Более того, возможны другие имплементации людей. Это также к вопросу совместимости ABI.
CC>>>Если чо в ядре макоси в кернеле поддержка C++ имеется. E>>Это ты про FreeBSD сейчас? Там все также на Си. CC>
E>>Достаточно чтобы открыть тебе глаза. CC>Так бы и сказал что ничего всерьёз не писал.
Я довольно много видел такого "C++ кода" порожденного горе-архитекторами-плюсовиками и затем забитого в ядро кувалдами.
После того как этот код реанимируют к жизни чтобы он ну хоть как-то работал, от плюсов там остается только слово class да и то не всегда, и куча хаков-подпорок впридачу.
E>>Это совсем перепендикулярно языку. CC>А, т.е. язык это что то божественное и непостижимое, а в реальности используется что то совсем другое?
Твои высказывания про хлеб, масло, и личинки рыбы к языку имеют отношение чуть меньше чем ничего.
E>>Кто тебе сказал, что это header файлы ? CC>А что это? Магия?
Магия, узаконеная стандартом языка. Тебе процитировать или сам найдеш ?
Ты никогда не задавался вопросом почему у большинства этих "хеадеров" нет расширения ни .hpp и ни .h ?
CC>>>Т.е. если я сотру все headers от std то внезапно всё перестанет работать? E>>А ты уверен что всегда сможеш их найти ? CC>Что за бред ты несёшь?
Т.е. в итоге ты и языка С++ не знаеш ? Неудивительно, учитывая твою позицию.
CC>>>Даже RTL таки заменяемая часть, так что чушь. E>>У меня для тебя совсем плохие новости. CC>Дооо! А если надо С++ на платформе где его раньше не было то с горы спускаются старцы, проводят ритуал и RTL спускается с небес, да!
Примерно так и есть. Тебе напомнить историю Симбиана, Бады и Андроида ? Когда там C++ появился ты видимо не вкурсе ?
CC>Это просто кусок кода, platform support library. CC>И всё.
Это очень сложный "кусок кода", настолько сложный, что не все вендоры готовы вот прям щас взять и спортировать его на свою платформу.
Да и просто пересобрать его для существующей платформы с первого раза еще ни у кого не получалось правильно.
И все это — при открытых исходниках.
А ты, гусар, собрался его в легкую заменять. Ну вперед — замени, например у студии, на собственный.
CC>>>Берёшь компилер, пишешь на том же самом С++ пару платформенных функций, на которые тот вставляет референсы, ожидая что поддержка платформы будет прилинкована и всё. E>>Ну напиши на том же самом C++ крючек для dynamic_cast или throw. CC>Ох деточка, не боги горшки обжигают.
Ты сначала попробуй а потом мне рассказывай про свои горшки.
А потом еще раз попробуй, на следующей версии компилятора.
И потом еще один раз, через версию, если не дойдет.
CC>Для Wintel будет так: CC>extern "C" void __stdcall _CxxThrowException (void* pExceptionObject, _ThrowInfo* pThrowInfo) CC>{ CC>... а тут пиши что хочешь. CC>Можешь перезавернуть в платформенные, можешь сам корячиться. CC>}
А тут ничего особо не напишеш особо кроме kernel panic.
Но ты ведь наверно понимаеш что кидать kernel panic тут как-то не по джентельменски — соседнии приложения, и юзер, да и босс юзера, купивший твой софт не оценят.
А если еще твой софт где-ть на АЭС работает — тут не просто не поймут, но еще и бо-бо могут сделать....
Поэтому ты конечно можеш пореверсить твой любимый компилятор на предмет stack frames, честно откатываться к ним, вызывать деструкторы (что там у нас за недокументированая структурка _ThrowInfo ? ).
А потом еще раз... и еще один... И еще один через пару лет — поддержка она такая. И даже еще разок, лет через пять...
Пока не обанкротишся — всё бабло ушло на поддержку этого говна, либо не уволишся, оставив подарок последователям (что видимо и произошло в твоем случае).
CC>PVOID __RTDynamicCast (PVOID inptr, LONG VfDelta, PVOID SrcType, PVOID TargetType, BOOL isReference) throw(...) CC>{ CC>документацию в руки и вперёд! CC>Функции для того чтоб парсить инфу о типах что нагенерил компилятор в доках описаны, в платформе есть. CC>}
В случае Visual Studio — выделенное является враньем. Частично инфу конечно можно добыть методом гугла и реверса, но...
Здравствуйте, eskimo82, Вы писали:
E>Ты конечно можеш сделать людей подмножеством коней, как это сделала микрософт. Но это совершенно не значит, что это одинаковый сущности на одном и том же уровне абстракции.
Это всё чепуха. Компилятору пофигу как ты будешь RTL внутри реализовывать: проедешься на готовом или сделаешь отдельно, если контракт по вызовам соблюдается — всё работает замечательно.
E>Более того, возможны другие имплементации людей. Это также к вопросу совместимости ABI.
И чо? Семейство компилятора и платформа для писанины в кернел величина постоянная, так что мимо.
E>Я довольно много видел такого "C++ кода" порожденного горе-архитекторами-плюсовиками и затем забитого в ядро кувалдами.
Я видел много говнокода на самых разных языках, и что с того?
E>от плюсов там остается только слово class да и то не всегда, и куча хаков-подпорок впридачу.
Ну я тоже видел что если дать поддерживать С++ код сишникам то в итоге там остаётся только то, что сишники хоть как то понимают, да
Всё остальное объявляется непонятной ересью и яростно переписывается.
E>Твои высказывания про хлеб, масло, и личинки рыбы к языку имеют отношение чуть меньше чем ничего.
Это инструмент, которым я зарабатываю на жизнь.
CC>>А что это? Магия? E>Магия, узаконеная стандартом языка.
Please! Перестань уже молиться и посмотри наконец под капот!
E>Ты никогда не задавался вопросом почему у большинства этих "хеадеров" нет расширения ни .hpp и ни .h ?
А ты никогда не задавался вопросом почему директиве #include пофигу вообще на все расширения и прочее?
Так вот, это всё "синтаксический сахар" (тм)
CC>>А если надо С++ на платформе где его раньше не было то с горы спускаются старцы, проводят ритуал и RTL спускается с небес, да! E>Примерно так и есть.
Вай какой дремучий пц!
E>Это очень сложный "кусок кода", настолько сложный, что не все вендоры готовы вот прям щас взять и спортировать его на свою платформу.
Ну и на какую же платформу вендоры отказываются "портировать", аргументируя именно как "вай как сложно, слющай!"?
E>Да и просто пересобрать его для существующей платформы с первого раза еще ни у кого не получалось правильно. E>И все это — при открытых исходниках.
Руки из жопы никто не отменял.
E>А ты, гусар, собрался его в легкую заменять.
Более того, уже несколько раз заменял для разных платформ.
E> Ну вперед — замени, например у студии, на собственный.
Уже было, два раза.
E>Ты сначала попробуй а потом мне рассказывай про свои горшки.
Я это уже делал, причём за деньги
E>А потом еще раз попробуй, на следующей версии компилятора.
Да вот спросил у бывших коллег, они пользуют примерно 8 лет назад написанный рантайм и горя не знают.
Или ты не про промышленные компиляторы а про всякое экспериментальное, где всё перехреначивают каждый месяц?
E>И потом еще один раз, через версию, если не дойдет.
E>А тут ничего особо не напишеш особо кроме kernel panic.
Ты — безусловно, у меня тут сомнений уже не осталось.
E>Но ты ведь наверно понимаеш что кидать kernel panic тут как-то не по джентельменски
Дык не кидай, зачем? Или ты других способов не знаешь?
E>что видимо и произошло в твоем случае.
Хреновый из тебя "телепатор"
E>В случае Visual Studio — выделенное является враньем. Частично инфу конечно можно добыть методом гугла и реверса, но...
Дооо, страшный секрет охраняемый драконом!
...\VC\crt\src\eh\rtti.cpp
/***
*rtti.cxx - C++ runtime type information
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
* Implementation of C++ standard runtime type information
****/
...
extern"C" PVOID __CLRCALL_OR_CDECL __RTDynamicCast (
PVOID inptr, // Pointer to polymorphic object
LONG VfDelta, // Offset of vfptr in object
PVOID SrcType, // Static type of object pointed to by inptr
PVOID TargetType, // Desired result of cast
BOOL isReference) // TRUE if input is reference, FALSE if input is ptrthrow(...)
{
PVOID pResult=NULL;
_RTTIBaseClassDescriptor *pBaseClass;
if (inptr == NULL)
return NULL;
__try {
PVOID pCompleteObject = FindCompleteObject((PVOID *)inptr);
_RTTICompleteObjectLocator *pCompleteLocator =
(_RTTICompleteObjectLocator *) ((*((void***)inptr))[-1]);
#if (defined(_M_X64)) && !defined(_M_CEE_PURE)
unsigned __int64 _ImageBase;
if (COL_SIGNATURE(*pCompleteLocator) == COL_SIG_REV0) {
_ImageBase = GetImageBase((PVOID)pCompleteLocator);
}
else {
_ImageBase = ((unsigned __int64)pCompleteLocator - (unsigned __int64)COL_SELF(*pCompleteLocator));
}
#endif// Adjust by vfptr displacement, if any
inptr = (PVOID *) ((char *)inptr - VfDelta);
// Calculate offset of source object in complete object
ptrdiff_t inptr_delta = (char *)inptr - (char *)pCompleteObject;
if (!(CHD_ATTRIBUTES(*COL_PCHD(*pCompleteLocator)) & CHD_MULTINH)) {
// if not multiple inheritance
pBaseClass = FindSITargetTypeInstance(
pCompleteLocator,
(_RTTITypeDescriptor *) SrcType,
(_RTTITypeDescriptor *) TargetType
#if (defined(_M_X64)) && !defined(_M_CEE_PURE)
, _ImageBase
#endif
);
}
else if (!(CHD_ATTRIBUTES(*COL_PCHD(*pCompleteLocator)) & CHD_VIRTINH)) {
// if multiple, but not virtual, inheritance
pBaseClass = FindMITargetTypeInstance(
pCompleteObject,
pCompleteLocator,
(_RTTITypeDescriptor *) SrcType,
inptr_delta,
(_RTTITypeDescriptor *) TargetType
#if (defined(_M_X64)) && !defined(_M_CEE_PURE)
, _ImageBase
#endif
);
}
else {
// if virtual inheritance
pBaseClass = FindVITargetTypeInstance(
pCompleteObject,
pCompleteLocator,
(_RTTITypeDescriptor *) SrcType,
inptr_delta,
(_RTTITypeDescriptor *) TargetType
#if (defined(_M_X64)) && !defined(_M_CEE_PURE)
, _ImageBase
#endif
);
}
if (pBaseClass != NULL) {
// Calculate ptr to result base class from pBaseClass->where
pResult = ((char *) pCompleteObject) +
PMDtoOffset(pCompleteObject, BCD_WHERE(*pBaseClass));
}
else {
pResult = NULL;
if (isReference)
#ifndef _SYSCRT
throw std::bad_cast("Bad dynamic_cast!");
#else
throw bad_cast("Bad dynamic_cast!");
#endif
}
}
__except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION
? EXCEPTION_EXECUTE_HANDLER: EXCEPTION_CONTINUE_SEARCH)
{
pResult = NULL;
#ifndef _SYSCRT
throw std::__non_rtti_object ("Access violation - no RTTI data!");
#else
throw __non_rtti_object ("Access violation - no RTTI data!");
#endif
}
return pResult;
}
Официальный С++ исходник того самого магического кода, кто бы мог подумать!!!
Ну и о чём с тобой дальше вообще можно разговаривать?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, eskimo82, Вы писали:
E>Фи. Все думали щас он возьмет и вытащит из за запазухи голубя. Ну чудо не случилось и вытащил он дырявые носки.
В винде сам производитель в DDK добавил всякого разного чтоб людям жизнь упростить, там допиливать надо только если уж совсем размахнуться хочешь.
Во всяких ваших луниксах народ плюсов истерически боится — раз главный пингвин не умеет то нефиг и начинать.
E>А это значит, что писать можно только с компилятором C++ поддерживающим конкретно эту имплементацию, другой компилятор, например с sjlj, или более быстрым dwarf уже не подойдет...
С чего бы? В винде SEH просто удобен, но тебе ничего не мешает написать поиск правильного frame handler по готовым таблицам и его вызвать, если уж работаешь в таком окружении где этого хелпера под рукой нет.
Скучно с тобой.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
E>>Фи. Все думали щас он возьмет и вытащит из за запазухи голубя. Ну чудо не случилось и вытащил он дырявые носки. CC>В винде сам производитель в DDK добавил всякого разного чтоб людям жизнь упростить, там допиливать надо только если уж совсем размахнуться хочешь.
Винда — вообще помойка всего.
CC>Во всяких ваших луниксах народ плюсов истерически боится — раз главный пингвин не умеет то нефиг и начинать.
В Линуксах народ в своей массе технически более продвинутый и думать умеет. Во всяком случае в состоянии оценить последствия использования молотка там где нужна отвертка.
E>>А это значит, что писать можно только с компилятором C++ поддерживающим конкретно эту имплементацию, другой компилятор, например с sjlj, или более быстрым dwarf уже не подойдет... CC>С чего бы? В винде SEH просто удобен, но тебе ничего не мешает написать поиск правильного frame handler по готовым таблицам и его вызвать, если уж работаешь в таком окружении где этого хелпера под рукой нет.
И также ничего тебе не мешает поддерживать выделеную жирным поделку при выходе новых версий компилятора. Ну первые 5 раз хотя бы...
CC>Скучно с тобой.
А ты сам встал в такую позу.
E>>Ты конечно можеш сделать людей подмножеством коней, как это сделала микрософт. Но это совершенно не значит, что это одинаковый сущности на одном и том же уровне абстракции. CC>Это всё чепуха. Компилятору пофигу как ты будешь RTL внутри реализовывать: проедешься на готовом или сделаешь отдельно, если контракт по вызовам соблюдается — всё работает замечательно.
Ключевая фраза. Ты уверен что ты соблюдаеш недокументированный контракт ?
Ты уверен что соблюсти этот контракт возможно в лимитированных условиях ядра ?
E>>Более того, возможны другие имплементации людей. Это также к вопросу совместимости ABI. CC>И чо? Семейство компилятора и платформа для писанины в кернел величина постоянная, так что мимо.
Ну да, есть студия, есть icc, есть clang... И у всех у них разные и различающиеся точки зрения на имплементацию.
E>>Я довольно много видел такого "C++ кода" порожденного горе-архитекторами-плюсовиками и затем забитого в ядро кувалдами. CC>Я видел много говнокода на самых разных языках, и что с того?
С того что голова дана чтобы делать выводы, а не только есть икру с маслом.
E>>от плюсов там остается только слово class да и то не всегда, и куча хаков-подпорок впридачу. CC>Ну я тоже видел что если дать поддерживать С++ код сишникам то в итоге там остаётся только то, что сишники хоть как то понимают, да CC>Всё остальное объявляется непонятной ересью и яростно переписывается.
А почему код попадает к сишникам ? Псевдоплюсовики несправляются со своими порождениями ?
E>>Твои высказывания про хлеб, масло, и личинки рыбы к языку имеют отношение чуть меньше чем ничего. CC>Это инструмент, которым я зарабатываю на жизнь.
Да, но по факту ты его не знаеш.
CC>>>А что это? Магия? E>>Магия, узаконеная стандартом языка. CC>Please! Перестань уже молиться и посмотри наконец под капот!
Зачем мне смотреть под капот твоего пепелаца ?
E>>Ты никогда не задавался вопросом почему у большинства этих "хеадеров" нет расширения ни .hpp и ни .h ? CC>А ты никогда не задавался вопросом почему директиве #include пофигу вообще на все расширения и прочее? CC>Так вот, это всё "синтаксический сахар" (тм)
Это не так.
CC>>>А если надо С++ на платформе где его раньше не было то с горы спускаются старцы, проводят ритуал и RTL спускается с небес, да! E>>Примерно так и есть. CC>Вай какой дремучий пц! E>>Это очень сложный "кусок кода", настолько сложный, что не все вендоры готовы вот прям щас взять и спортировать его на свою платформу. CC>Ну и на какую же платформу вендоры отказываются "портировать", аргументируя именно как "вай как сложно, слющай!"?
А чтож ты примеры реальных платформ поскипал ? Не вписываются в твою вселенную ?
E>>Да и просто пересобрать его для существующей платформы с первого раза еще ни у кого не получалось правильно. E>>И все это — при открытых исходниках. CC>Руки из жопы никто не отменял. E>>А ты, гусар, собрался его в легкую заменять. CC>Более того, уже несколько раз заменял для разных платформ.
Так что потом тебе очень сильно били и завязали руки узлом в рот через жопу ?
E>> Ну вперед — замени, например у студии, на собственный. CC>Уже было, два раза.
Стесьняюсь спросить — а почему два ?
Или во второй раз заставили все переписывать для новой версии ?
E>>Ты сначала попробуй а потом мне рассказывай про свои горшки. CC>Я это уже делал, причём за деньги
Еще и приплачивал чтобы взяли поделку ?
E>>А потом еще раз попробуй, на следующей версии компилятора. CC>Да вот спросил у бывших коллег, они пользуют примерно 8 лет назад написанный рантайм и горя не знают. CC>Или ты не про промышленные компиляторы а про всякое экспериментальное, где всё перехреначивают каждый месяц?
В "промышленных" все перехреначивают довольно часто.
E>>И потом еще один раз, через версию, если не дойдет. CC>
И не только часто, а еще и в самый неподходящий момент.
E>>А тут ничего особо не напишеш особо кроме kernel panic. CC>Ты — безусловно, у меня тут сомнений уже не осталось.
Я всего лишь свидетель этого.
E>>Но ты ведь наверно понимаеш что кидать kernel panic тут как-то не по джентельменски CC>Дык не кидай, зачем?
И что делать ?
CC>Или ты других способов не знаешь?
Ну как, ну ка расскажи ? Или опять сольешся ?
E>>что видимо и произошло в твоем случае. CC>Хреновый из тебя "телепатор"
А чтоже это тебя так тронуло то ?
E>>В случае Visual Studio — выделенное является враньем. Частично инфу конечно можно добыть методом гугла и реверса, но... CC>Дооо, страшный секрет охраняемый драконом!
Он не документирован полностью.
CC>...\VC\crt\src\eh\rtti.cpp
Ну что-ты кусочек кода выдернул, стековые фреймы 1) недокументированы, 2) меняются от версии к версии.
CC>Официальный С++ исходник того самого магического кода, кто бы мог подумать!!!
То-то народ потихоньку занимается реверсом этих "оффициальных исходников": https://www.cnblogs.com/sunkang/archive/2011/05/06/2038810.html
CC>Ну и о чём с тобой дальше вообще можно разговаривать?
Сливаешся.