Безопасный C++ в приложениях в реальном времени в жестком реальном времени

Я хотел бы услышать различные мнения, как безопасно использовать C++ в приложениях реального времени в жестком реальном времени.

Более точно, вероятно, возможно создать некоторые макросы/шаблоны/библиотеку классов для безопасного манипулирования данными (изолирующий для переполнения, делит на нуль, производят значения бесконечности, или подразделение возможно только для специальных "ненулевых" типов данных), массивы со связанной проверкой и циклами foreach, безопасный smartpointers (подобный для повышения shared_ptr, например) и даже безопасная модель многопоточности/распределять (передача сообщений, и легкие процессы как определяются в Erlang languge).

Затем мы запрещаем некоторый опасный c/c ++ конструкции, такие как необработанные указатели, некоторые необработанные типы, собственный "новый" оператор и собственный c/c ++ массивы (для прикладного программиста, не для устройства записи библиотеки, конечно). Идеально, мы должны создать специальный препроцессор/средство проверки, по крайней мере, у нас должна быть некоторая формальная процедура проверки, которая может быть применена к источникам с помощью некоторого инструмента или вручную некоторым человеком.

Так, мои вопросы:

1) Есть ли какие-либо существующие библиотеки/проекты, которые используют такую идею? (Встроенный C++ имеет, по-видимому, не желаемого вида)?

2) Действительно ли это - хорошая идея вообще или нет? Или это может быть полезно только для разработки прототипа некоторого другого гипотетического языка? Или это полностью неприменимо?

3) Любые другие мысли (или ссылки) по этому вопросу также добро пожаловать

Извините, если этим вопросом не является на самом деле вопрос, offtopic, дубликат, и т.д., но я не нашел, что более соответствующее место спрашивает это

7
задан user396672 12 August 2010 в 12:41
поделиться

3 ответа

Хорошие правила написания C ++ для критически важных приложений реального времени можно найти в стандартах кодирования Joint Strike Fighter . Многие из правил основаны на стандартах кодирования MISRA C , которые, как мне кажется, являются собственностью. PC-Lint - это средство проверки кода C ++ с такими наборами правил, которые вам нужны (включая правила MISRA). Я считаю, что вы также можете настроить свои собственные правила.

9
ответ дан 6 December 2019 в 19:31
поделиться

Мы используем C ++ в критически важных приложениях реального времени, хотя я полагаю, что у нас это легко (теоретически), потому что мы должны предоставлять только гарантии в реальном времени, такие же хорошие, как и оборудование наших клиентов использовать. Таким образом, достаточное профилирование позволяет нам обойтись без предварительной загрузки mlockall () или стека или любых других традиций RT. Что касается самого языка, я думаю, что повседневные современные методы кодирования на C ++ (те, которые отрицают концепции C) вполне достаточны для написания надежных приложений, которые могут использоваться в контекстах RT, с учетом оборудования 21-го века.

В центре внимания должны быть модульные тесты и контроль качества, а не внутренние библиотеки, дублирующие существующие языковые функции.

2
ответ дан 6 December 2019 в 19:31
поделиться

Если вы пишете критически важное высокопроизводительное ПО в реальном времени на C ++, вам, вероятно, понадобится каждая микросекунда, которую вы можете получить от оборудования. Таким образом, я бы не стал предлагать внедрять все дополнительные проверки, такие как те, которые вы упомянули, по крайней мере, те, которые связаны с накладными расходами на выполнение программы. Очевидно, что вы можете замаскировать исключения с плавающей запятой, чтобы не допустить сбоя программы при делении на ноль.

Некоторые наблюдения:

  • Экспертная рецензия всего кода (возможно, несколько рецензентов). Это будет иметь большое значение для улучшения качества, не требуя множества проверок во время выполнения.
  • ОБЯЗАТЕЛЬНО используйте диагностические инструменты и утверждения, не относящиеся только к выпуску.
  • Используйте системы моделирования для тестирования невстроенного оборудования.
  • C ++ был специально разработан без таких вещей, как проверка границ по соображениям производительности.

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

Кто-то еще указал, что если вам нужна Ада, просто используйте Аду.

2
ответ дан 6 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: