
C++ 的创建者 Bjarne Stroustrup 提倡采用强制执行指南的配置文件来增强该语言的安全性。
Bjarne Stroustrup告诉 TNS:“我希望向整个社区,尤其是 WG21 的成员传达我对 C++ 未来发展方向的看法。”
这位 74 岁的 C++ 创始人花了 40 年的时间关注着他于 1985 年设计的这种语言的发展。
为了鼓励一些长期期望的功能,上个月Stroustrup在《ACM 通讯》上发表了一篇 6,300 字的文章“ 21 世纪 C++ ”,承诺展示现代、类型安全的“21 世纪 C++”的“关键概念”,以创建“强化版 C++”。例如,在文章中,Stroustrup 强调了长期实验的方法,例如使用指南强制配置文件编写更安全的代码。为了保持与数十年来已经编写的 C++ 代码的兼容性,“我们无法改变语言,”Stroustrup 写道。“但我们可以改变它的使用方式……”
然而,这种演变并不完全取决于他。 在接近尾声的一节中 , Stroustrup 承认了标准化工作组 WG21,以及它将不可避免地在语言变化的程度上发挥作用。“我不愿意对未来做出预测,”Stroustrup 写道,“部分原因是这本身就很危险,特别是因为 C++ 的定义由一个庞大的 ISO 标准委员会控制,该委员会以共识为基础。”
“我上次查看时,会员名单上有 527 人。这表明了热情、广泛的兴趣,并提供了广泛的专业知识,但这对于编程语言设计来说并不理想,而且 ISO 规则不能进行重大修改。”
然而,当谈到那些关键的受众时,“有些人不了解历史,因此错过了关键点,”Stroustrup 告诉 TNS,“例如指南和配置文件是否符合 C++ 的长期发展方向。”所以他正在采取措施教育他们,“要做到这一点,我必须展示关键特性适合什么地方。”
他这篇详尽的文章是一个很好的开始——但它也只是多管齐下努力的一部分。最终,它可能会改变整个 C++ 生态系统的发展轨迹,同时也为程序员带来他们一直渴望的高性能、类型安全且灵活的语言。
而这一切,也正是在实现 Stroustrup 自 20 世纪 80 年代以来一直坚持的目标的同时……
呼吁紧急行动 Stroustrup 也直接与 WG21 进行了沟通。The Register指出,“过去三四年来,行业和政府网络安全专家一直在劝阻使用 C 和 C++,同时宣传内存安全性更高的语言。”因此,在发表文章三天后,Stroustrup 向 C++ 标准委员会发出了一封官方信函,他将其描述为“呼吁采取紧急行动,部分是为了应对针对 C++ 的前所未有的严重攻击。
“我认为 WG21 需要做一些有意义的事情,并让人们看到他们这么做。Profiles 是一个可以做到这一点的框架。”
Stroustrup 的愿景很明确。他在文章中写道:“指导方针很好也很有用,但在大型代码库中始终如一地遵循它们基本上是不可能的。”我们需要的是某种强制机制,可以真正标记和防止悬空指针、范围错误和 nullptr 取消引用等问题。
幸运的是,这种强制机制已经以这些指南强制配置文件的形式提供。脚注提供了它们在 Visual Studio 2019 中的使用示例,该配置文件实现了“Lifetime”配置文件的早期版本,该配置文件检查 C++ 是否存在悬空指针和引用以及对象生命周期中的其他常见错误……
基本上,每个配置文件都会验证是否满足了实现特定结果的要求,通常是在编译时。除了“生命周期”检查配置文件外,还有更多计划,包括“边界”配置文件,可确保所有访问数组的代码都包含范围检查安全检查。
在我们的电子邮件采访中,Stroustrup 指出,C++ 已经通过其 2020 年推出的新span类模板支持更好地防止范围错误 。Bounds Profile 只是确认那些确保边界安全的功能确实到位。
Stroustrup 告诉我:“其中大部分都是标准的,现在就可以使用。”他们还计划推出其他几个配置文件,以帮助代码避免类型或算术错误。Stroustrup 相信,“在不久的将来,配置文件将提供一个框架来执行各种约束。”
希望这可以为 C++ 提供人们所期待的安全保障。但这也是 Stroustrup 40 年前对 C++ 最初的设想的自然发展。
“更准确的估计” 类型安全等特性一直是 Stroustrup针对 C++的安全性和性能目标之一。
“这一点自最初的日子以来就没有改变过,”他在文章中写道,并在脚注中引用了他 1994 年出版的《C++ 的设计和演化》一书。但当代 C++ 可以比早期版本的 C++ 更好地实现这些长期目标,部分原因是该语言“旨在演化”,Stroustrup 在文章结尾写道。因此,经过数十年的改进,他称“当代 C++”如 C++ 23(10 月发布的版本)“更接近”他最初的理想。

他在敦促 WG21 采用 Profiles 的说明中也强调了这一点:“正如我之前所说,这也是一个机会,因为类型安全和资源安全(包括内存安全)从一开始就是 C++ 的主要目标。”
“我对此深有感触。请不要被我相对平静的语言所欺骗。”
Stroustrup 的文章指出,语言不断发展的一个问题是“许多人对 C++ 的看法过时了”。 “今天,我们仍然看到无数人提到 C/C++ 这种神秘的语言,通常认为 C++ 是 C 的一个小扩展,包含了 C 的所有糟糕方面,并且严重滥用了复杂的 C++ 特性……”但 Stroustrup 强调,C++ 仍在不断发展,有“正在进行的工作”和可用于改进的实验性特性,例如异步计算和SIMD 的通用模型。
“一个严重的问题是如何将不同的思想整合成一个连贯的整体,”斯特劳斯特鲁普写道。与大多数软件项目不同——甚至与学术界的大多数计算机科学工作不同——设计一种语言需要“在一个并非所有相关因素都已知的领域做出决策,并且公认的结果几十年内都不会发生重大变化。”
简而言之,这是一个难题 — — 而且仍然是一个已知问题。“几十年来几乎所有的语言设计努力都失败了,这一事实表明了这个问题的严重性。”
但这并不意味着 C++ 就停止了进化的尝试……
显著的改进 配置文件并不是 21 世纪 C++ 改进的唯一方式。“我还要指出,模块是一种使代码更简洁、编译时间大大缩短的机制,”Stroustrup 在我们的电子邮件采访中说道。
Stroustrup 的文章指出,导入已编译的模块比使用老式的#include语句可以提高“7 到 10 倍的速度优势” 。
“大多数人现在都可以通过使用 C++23 提供的功能来显著改进他们的代码,”他告诉我。展望未来,Stroustrup 预测未来还会有更多性能增强功能。“在 C++26 中,我们可能会看到改进的并发支持、静态反射和契约,以及许多小改进和标准库组件。”
这种前瞻性的希望或许可以解释为什么 Stroustrup 希望将他对 Profiles 的呼吁建立在 C++ 的更广阔的历史中。Stroustrup 告诉我,他的文章“展示了 C++ 的发展方向。安全保障即将到来,这在 C++ 的背景下并不是一个新奇的想法,而是长期目标的一部分。完全类型安全和资源安全是 C++ 的最初目标之一,但推动广泛的应用领域向前发展需要时间,而且必须逐步完成。”
他意识到已安装的代码库非常广泛,而且 C++“如今已覆盖了广泛的应用领域。安全保障必须且将解决那些已使用 C++ 来提供高质量应用程序的领域。
“关注内存安全的人们应该注意到,C++ 不是 C,并且基于更安全的编程风格和强化库的解决方案已经在 C++ 中广泛部署。”
我问他是否有迹象表明他的ACM文章产生了影响——尽管这显然很难量化。“我不愿意对未来做出预测,”Stroustrup 说,“但我们已经看到以概念形式出现的对通用编程的更好支持。”
如果你正在寻找有影响力的改进,Stroustrup 指出,你也可以超越语言本身。目前有各种各样的工具可供 C++ 开发人员使用。
“语言不仅仅是你在语言规范或正式标准中找到的东西。”

评论