The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Линус Торвальдс не исключил возможность интеграции поддержки Rust в ядро Linux 5.20, opennews (ok), 22-Июн-22, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


344. "Линус Торвальдс не исключил возможность интеграции поддержки..."  +/
Сообщение от n00by (ok), 24-Июн-22, 07:55 
Ядро Windows написано на Си, но исключения там используются. Механизм Structured Exception Handling (SEH) похож на Си++ исключения и последние могут быть реализованы поверх него. Штатный RTTI есть в Qt. Судя по возрасту проекта, когда-то там был свой велосипед, но теперь внутри него чистый dynamic_cast.
Ответить | Правка | Наверх | Cообщить модератору

373. "Линус Торвальдс не исключил возможность интеграции поддержки..."  +/
Сообщение от warlock66613email (ok), 24-Июн-22, 22:44 
Про SEH я в курсе. Интересно именно про C++ и HaikuOS / BeOS.

> Штатный RTTI есть в Qt.

Ого. Пожалуй стоит сильнее прислушаться к хейтерам современного Qt. Возможно они не так уж неправы.

Ответить | Правка | Наверх | Cообщить модератору

386. "Линус Торвальдс не исключил возможность интеграции поддержки..."  +/
Сообщение от n00by (ok), 25-Июн-22, 07:43 
> Про SEH я в курсе. Интересно именно про C++ и HaikuOS /
> BeOS.

Что именно интересно про Си++? Когда дизайнили ядро NT, насколько понимаю, языка С++ не было. SEH точно так же хранит некоторую информацию времени исполнения о типе ошибки. Точно так же есть проблемы, не работает на высоких IRQL. И ещё объекты ядра обмениваются сообщениями. :)

Ответить | Правка | Наверх | Cообщить модератору

393. "Линус Торвальдс не исключил возможность интеграции поддержки..."  +/
Сообщение от warlock66613email (ok), 25-Июн-22, 13:04 
> Что именно интересно про Си++?

Интересно, написаны HaikuOS/BeOS на C++ с эксепшенами или на C++ без эксепшенов.

Ответить | Правка | Наверх | Cообщить модератору

394. "Линус Торвальдс не исключил возможность интеграции поддержки..."  +/
Сообщение от n00by (ok), 25-Июн-22, 15:48 
Уже не пойму, когда шутят, а когда нет. Можно ведь поискать. https://github.com/haiku/haiku/search?q=throw

Вот например


inline void*
operator new(size_t size, ObjectCache* objectCache, uint32 flags) throw()
{
    return object_cache_alloc(objectCache, flags);
}

https://github.com/haiku/haiku/blob/8f16317a5b6db5c672f33181...
Ответить | Правка | Наверх | Cообщить модератору

397. "Линус Торвальдс не исключил возможность интеграции поддержки..."  +/
Сообщение от warlock66613email (ok), 25-Июн-22, 16:17 
Из приведённого вами куска кода ответ на мой вопрос не получить никак.

Врочем, действительно, если поискать (для ответа на мой вопрос искать надо конечно в первую очередь `dynamic_cast`, а во вторую `catch`, в то время как наличие/отсутствие `throw` совершенно иррелевантно), то похоже что используется именно то, что называется «C++ без эксепшенов».

Ответить | Правка | Наверх | Cообщить модератору

399. "Линус Торвальдс не исключил возможность интеграции поддержки..."  +/
Сообщение от n00by (ok), 25-Июн-22, 17:32 
Я не вижу какого-либо конкретного вопроса в Ваших сообщениях. Возможно, потому что имею некторое представление, как работают диспетчер исключений и dynamic_cast. throw() это в моём понимании "с эксепшенами" (для kernel/slab/Slab.h сделано, как и должно быть). Их поддержку можно на уровне транслятора отключить.
Ответить | Правка | Наверх | Cообщить модератору

403. "Линус Торвальдс не исключил возможность интеграции поддержки..."  +/
Сообщение от warlock66613email (ok), 25-Июн-22, 19:09 
«C++ с эксепшенами» — это стандартный C++ с RTTI. «C++ без эксепшенов» получается если компилировать с выключенным RTTI. Подход к написанию кода настолько сильно вынужденно меняется в последнем случае, что это практически другой язык. Наличие `throw` в коде (особенно в плане указания что метод не кидает эксепшенов) никак не мешает иметь выключенный RTTI. Другое дело — `dynamic_cast`. Ну и `catch` тоже.
Ответить | Правка | Наверх | Cообщить модератору

417. "Линус Торвальдс не исключил возможность интеграции поддержки..."  +/
Сообщение от n00by (ok), 26-Июн-22, 09:42 
Напишу только по поводу MSVC (у GCC исходники открыты и всё должно быть документировано без меня). Если отключить RTTI, диспетчер исключений никуда не денется и будет выполнять свои задачи, вызывать деструкторы, искать и вызывать обработчик (подходящий окажется с ...). Его следует отключать отдельно, если поддержка исключений не нужна. А подход к написанию кода меняется уже от того, что код в ядре. В ряде случаев бросать исключения никак нельзя, будь то C++ или инструкция int3. И зачем в ядре dynamic_cast<>, где его можно применить, я пока не пойму.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру