原文:https://www.modernescpp.com/index.php/why-do-we-need-guidlines-for-modern-c
此主观帖子基于15多年的C ++,Python和软件开发培训师经验。在过去的几年中,我负责软件和除颤器软件开发团队。这包括我们设备的法规事务。为除颤器编写软件极具挑战性,因为它们可能导致患者和操作人员死亡或重伤。
我想到一个问题,我们应该作为C ++社区来回答。
为什么我们需要现代C ++的准则?
这是我的想法。我只专注于三个事实。当然,有三个以上。这三个代表我的个人观点。
对于新手来说,C ++本质上很复杂
对于初学者来说,C ++特别是一种固有的复杂语言。当教人C ++时,您应该提供一套在至少90%的用例中对他们有用的规则。我考虑的规则包括使用自动,用花括号初始化,优先于线程而不是任务或不占用内存。我越来越多地教他们,并将它们纳入我的培训中。因此,我们需要使用C ++的最佳实践。它们说明了您应该如何编写代码。
我正在积极寻找这些线索。因此,我作了一些介绍,其中包括10个如何编写现代C ++的技巧。目前,我为《德国Linux杂志》撰写了由十部分组成的系列文章,其中涉及这些技巧。我以蒂姆·彼得斯(Tim Peters)的《 Python Zen》作为起点:这是20种格言如何用Python编写代码。
这是用Python编写惯用代码的20条规则。二十条,真的吗?实际上,这只是19条规则。最后一个仍然不见了。
我不喜欢每位培训师都会制定一套规则的想法。在好的情况下,这项工作是多余的。在最坏的情况下,我们会教不同的或可能相互矛盾的规则。
C ++对于专业程序员而言变得越来越具有挑战性
我不太担心新功能的数量,每个新的C ++标准都会为我们提供。我更关心现代C ++支持的新概念。老实说,这是专业C ++程序员最具挑战性的主题。您必须重新考虑并可能改变解决问题的方式。考虑使用协同程序,惰性求值,无限数据结构,函数组合或范围库进行范围理解的事件驱动编程。考虑一下现代C ++中基于合同的编程,反射或越来越多的功能和数学概念。这还不是全部。概念将彻底改变模板。
我说过,过多的新概念尤其会使专业程序员不知所措。他是用来解决经典工具问题的人。他很可能会落入铁钉子陷阱。
C ++经常用于安全关键型系统
最后,我非常关注。在嵌入式软件开发中,您通常必须坚持使用MISRA C ++。当前MISRA C ++:2008和规范是由 Motor Industry Software Reliability Association公布的。它们基于1998 年的MISRA C准则。最初为汽车行业设计,它们已成为在航空,军事和医疗领域中实施安全关键软件的事实上的标准。作为MISRA C,MISRA C ++描述了安全的C ++子集的准则。如果您不了解MISRA C ++,则这里有更多详细信息:事实。
有一个概念上的问题。我们必须遵循从2008年开始的C ++标准。换句话说,指南并不是C ++中现代软件开发的最新技术。后面是三个标准(包括C ++ 17)。
我想,以提供一个例子: MISRA C ++不允许操作符重载。这不是编写C ++的最新技术。我在研讨会上教授用于实现类型安全算术的文字运算符,例如: auto constexpr dist = 4 * 5_m + 10_cm-3_dm。要实现这种类型安全的算术,您必须重载后缀的算术运算符和文字运算符。这是用户定义文字的详细信息。
老实说。我认为MISRA C ++不会与当前的C ++标准并驾齐驱。我的希望是不同的。
我的希望
我的希望是,我在“ 什么是现代C ++ ” 一文中介绍的C ++核心准则成为了现代C ++的准则。这尤其意味着,C ++核心准则将在长期运行中取代MISRA C ++,成为安全关键系统中C ++的强制性标准。
当然,那是一个非常主观的帖子。你怎么看?我对您的评论很好奇。