Re[23]: Sleep Sort
От: eskimo82  
Дата: 27.11.18 23:40
Оценка:
М>>А какие еще существующие сегодня ОС, кроме макос (и то, только в IOKit) используют С++ в драйверах?
CC>Да так же винда
Фи. Все думали щас он возьмет и вытащит из за запазухи голубя. Ну чудо не случилось и вытащил он дырявые носки.

С Вендой тут все очень не просто, т.к. она имплементирует исключения C++ через свой ядровый SEH.
А это значит, что писать можно только с компилятором C++ поддерживающим конкретно эту имплементацию, другой компилятор, например с sjlj, или более быстрым dwarf уже не подойдет...
И этот человек еще что-то проповедловал про замену рантайма
Re[23]: Sleep Sort
От: eskimo82  
Дата: 28.11.18 02:07
Оценка: :)
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 — выделенное является враньем. Частично инфу конечно можно добыть методом гугла и реверса, но...
Re[24]: Sleep Sort
От: CreatorCray  
Дата: 28.11.18 05:00
Оценка:
Здравствуйте, 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 ptr
    throw(...)
{
    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, значит пора закрыть эту страницу.
Всем пока
Re[24]: Sleep Sort
От: CreatorCray  
Дата: 28.11.18 05:00
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>Фи. Все думали щас он возьмет и вытащит из за запазухи голубя. Ну чудо не случилось и вытащил он дырявые носки.

В винде сам производитель в DDK добавил всякого разного чтоб людям жизнь упростить, там допиливать надо только если уж совсем размахнуться хочешь.
Во всяких ваших луниксах народ плюсов истерически боится — раз главный пингвин не умеет то нефиг и начинать.

E>А это значит, что писать можно только с компилятором C++ поддерживающим конкретно эту имплементацию, другой компилятор, например с sjlj, или более быстрым dwarf уже не подойдет...

С чего бы? В винде SEH просто удобен, но тебе ничего не мешает написать поиск правильного frame handler по готовым таблицам и его вызвать, если уж работаешь в таком окружении где этого хелпера под рукой нет.

Скучно с тобой.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[25]: Sleep Sort
От: eskimo82  
Дата: 29.11.18 15:34
Оценка: :)
E>>Фи. Все думали щас он возьмет и вытащит из за запазухи голубя. Ну чудо не случилось и вытащил он дырявые носки.
CC>В винде сам производитель в DDK добавил всякого разного чтоб людям жизнь упростить, там допиливать надо только если уж совсем размахнуться хочешь.
Винда — вообще помойка всего.

CC>Во всяких ваших луниксах народ плюсов истерически боится — раз главный пингвин не умеет то нефиг и начинать.

В Линуксах народ в своей массе технически более продвинутый и думать умеет. Во всяком случае в состоянии оценить последствия использования молотка там где нужна отвертка.

E>>А это значит, что писать можно только с компилятором C++ поддерживающим конкретно эту имплементацию, другой компилятор, например с sjlj, или более быстрым dwarf уже не подойдет...

CC>С чего бы? В винде SEH просто удобен, но тебе ничего не мешает написать поиск правильного frame handler по готовым таблицам и его вызвать, если уж работаешь в таком окружении где этого хелпера под рукой нет.
И также ничего тебе не мешает поддерживать выделеную жирным поделку при выходе новых версий компилятора. Ну первые 5 раз хотя бы...

CC>Скучно с тобой.

А ты сам встал в такую позу.
Re[25]: Sleep Sort
От: eskimo82  
Дата: 29.11.18 16:03
Оценка:
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>Ну и о чём с тобой дальше вообще можно разговаривать?

Сливаешся.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.