Тестирование C ++ 17 в критических для безопасности системах - PullRequest
0 голосов
/ 05 июля 2018

Я сейчас думаю о C ++ в критически важном для безопасности программном обеспечении (DO-178C DAL-D) и определениях стандарта кодирования. Я смотрел на MISRA C ++, которому снова 10 лет, и он скучает по всем возможностям C ++ 11… 17.

Хотя консервативность в отношении безопасности часто не плохая идея, новые языковые функции могут быть полезны для безопасности.

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

Но трудно найти языковые функции, которые несут в себе аспекты безопасности более заметно, чем "прояснение вещей". Какие аспекты современного C ++ действительно помогают в отношении безопасности?

Я создаю небольшой проект упражнений для проверки этих идей и в настоящее время полностью сосредоточен на том, чтобы «позволить компилятору проверить ваши предположения». Например, мы только начали использовать [[nodiscard]] и обнаружили, по крайней мере, две ошибки в течение первого часа. Но какие аспекты современного c ++ были разработаны и должны использоваться с учетом безопасности?

Ответы [ 2 ]

0 голосов
/ 10 июля 2018

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

По моему не столь скромному мнению, есть несколько языковых особенностей, то есть стандартные универсальные функции языка программирования, которые оба выходят за пределы допустимых стандартов И стоят времени и энергии, чтобы спорить с вами. путь в оценке. Если вы стремитесь к более высокому уровню абстракции (что также полезно для безопасности, хотя вряд ли вы найдете кого-либо, кто открыто признает это, поскольку это приведет к тому, что половина отрасли безопасности станет безработной, а другая половина - сильно устаревшей), тогда вы Было бы лучше прибегнуть к языку, специфичному для предметной области, и приложить усилия для безупречной компиляции (к исходному тексту) для стандартной платформы. Если вы не работаете в инженерной культуре, которая допускает это, тогда вы можете прибегнуть к некоторым исправлениям, которые предлагает другой ответ, но всегда трудно убедительно перенести намерение и значение неспецифических мер в другую безопасность. инженеры (специализированный язык, специфичный для предметной области, гораздо легче поддерживать и поддерживать).

Тем не менее, я думаю, что достижения в параллельном программировании в современном C ++ относительно быстро войдут в стандарты.

0 голосов
/ 05 июля 2018

Сначала они приходят мне в голову:

  • atomic и memory_model : они позволяют писать переносимый код в параллельном / без блокировки контексте.
  • unique_ptr : помогает упростить обработку памяти
  • override позволяет находить ошибки во время компиляции.
  • constexpr, если делает код написанным ближе к месту его использования, что помогает писать меньше ошибок (иногда, чтобы специализировать поведение в соответствии с параметром шаблона, вы бы написали класс с n специализации. Теперь вы можете использовать if constexpr с n филиалами).

и т. Д. ... в некотором смысле, учитывая преимущества ясности и переносимости кода, я думаю, что каждая функция C ++ 11/14/17 помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...