13

我目前正在考虑安全关键软件(DO-178C DAL-D)中的 C++ 和编码标准的定义。我在看 MISRA C++,它又有 10 年的历史了,它错过了所有 C++11…17 的特性。

虽然在安全方面保持保守通常不是一个坏主意,但新的语言功能可能对安全有益。

在审查期间,您必须争论您做出某些决定的原因。人们总是会争辩说,新的语言特性使代码更清晰……因此关于误解的错误更少;特别是如果编译器能够测试和验证您的假设。

但是很难找到比“让事情更清楚”更突出安全方面的语言特征。现代 C++ 的哪些方面真正有助于安全?

我正在建立一个小型练习项目来测试这些想法,目前完全专注于“让编译器检查你的假设”。比如我们刚开始使用[[nodiscard]],第一个小时就发现了至少两个这样的bug。但是现代 c++ 的哪些方面是在设计和使用时应考虑到安全性的?

4

2 回答 2

12

这些首先出现在我的脑海中:

  • atomicmemory_model :它们允许在并发/无锁上下文中编写可移植代码。
  • unique_ptr:有助于简化内存处理
  • override让您在编译时发现错误。
  • constexpr if使代码写得更接近使用它的地方,这有助于减少错误(有时,为了根据模板参数专门化一个行为,你会编写一个具有n专门化的类。现在你可以使用if constexpr分支n来代替)。

等等......在某种程度上,考虑到代码清晰度和可移植性的好处,我认为 C++11/14/17 的每个特性都有帮助。

于 2018-07-05T07:26:54.370 回答
0

人们总是会争辩说,新的语言特性使代码更清晰……因此关于误解的错误更少;特别是如果编译器能够测试和验证您的假设。

在我不那么谦虚的意见中,语言功能很少,即标准通用两种编程语言功能都超出了允许的标准,并且值得花时间和精力在评估中争论不​​休。如果您的目标是更高级别的抽象(这对安全来说也是一件好事,尽管您几乎找不到任何人公开承认这一点,因为这会使一半的安全行业失业,而另一半则严重过时),那么您最好求助于特定领域的语言,并将努力完美地编译(源代码)到符合标准的平台。如果您不在允许这样做的工程文化中工作,那么您可以求助于此处其他答案提出的一些补丁,

也就是说,我认为现代 C++ 并行编程的进步将相对较快地进入标准。

于 2018-07-10T12:47:22.003 回答