LINUX.ORG.RU

История изменений

Исправление hatred, (текущая версия) :

Тогда не работает 90% того, что описано в стандарте языка.

С какого перепугу? Тот же STL написан так, что он не вызывает напрямую thow, вызов делается через что-то вроде std::__throw_some_exception(), что является функцией, которая реализуется как часть минималистичного рантайма. В нашем embedded проекте там просто вызывалась panic(). На дебаг сборке гасились прерывания и мигал LED, на продакт - перезагрузка. Сходу: алгоритмы, вектора, списки, строки, всё прекрасно работало. Поэтому встречный вопрос: Вы утверждаете про 90%, а что именно не будет работать? И на основе каких знаний взята это цифра? Или так, лишь бы ляпнуть?

А что в рантайме/STL зависит от RTTI я даже навскидку не скажу. dynamic_cast, но он у конечного пользователя, в embedded точно можно обойтись. Там поведение более детерминированное. Да, я веду речь про Baremetall системы (без ОС или RTOS), жирный embedded с тем же Linux не в счёт. Там мало отличий от десктопа :)

ЗЫ Вот неполный список throw-функций:

namespace std {
void __throw_bad_alloc() throw();
void __throw_length_error(char const* msg);
void __throw_bad_function_call();
void __throw_out_of_range(char const* msg);
}

Ну и не совсем исключения:

extern "C" {
void __cxa_pure_virtual(void);
void __cxa_deleted_virtual(void);
}

Вообще, весь «рантайм» уместился в 36К исходников (повторюсь: исходников), большая часть которых: комментарии :)

Исходная версия hatred, :

Тогда не работает 90% того, что описано в стандарте языка.

С какого перепугу? Тот же STL написан так, что он не вызывает напрямую thow, вызов делается через что-то вроде std::__throw_some_exception(), что является функцией, которая реализуется как часть минималистичного рантайма. В нашем embedded проекте там просто вызывалась panic(). На дебаг сборке гасились прерывания и мигал LED, на продакт - перезагрузка. Сходу: алгоритмы, вектора, списки, строки, всё прекрасно работало. Поэтому встречный вопрос: Вы утверждаете про 90%, а что именно не будет работать? И на основе каких знаний взята это цифра? Или так, лишь бы ляпнуть?

ЗЫ Вот неполный список throw-функций:

namespace std {
void __throw_bad_alloc() throw();
void __throw_length_error(char const* msg);
void __throw_bad_function_call();
void __throw_out_of_range(char const* msg);
}

Ну и не совсем исключения:

extern "C" {
void __cxa_pure_virtual(void);
void __cxa_deleted_virtual(void);
}

Вообще, весь «рантайм» уместился в 36К исходников (повторюсь: исходников), большая часть которых: комментарии :)