17611538698
webmaster@21cto.com

Bjarne Stroustrup 谈他如何看待 C++ 的发展


导读:C++ 的作者 Bjarne Stroustrup 近日主张采用强制执行指南的配置文件,以此来增强该语言的安全性。

Bjarne Stroustrup 近日宣告:“我希望向整个C++社区,尤其是 WG21 的成员传达我对 C++ 未来发展方向的观点和看法。”

这位 74 岁的 C++ 创始人花了整整 40 多年的时间,创建了C++语言,如今仍然在关注着他于 1985 年设计的这种编程语言的发展。

为了鼓励一些开发者长久期望的功能,Stroustrup上个月在《ACM 通讯》上发表了一篇 6300 字的文章《21 世纪的 C++》,他承诺展示现代、类型安全的“21 世纪 C++”的“关键概念”,以创建“强化版 C++”。

比如,在文章中,Stroustrup 强调了长期实验的方法,例如使用指南强制配置文件编写更安全的代码。为了保持与数十年来已经编写的 C++ 代码的兼容性,“我们无法改变语言,”Stroustrup 写道。“但我们可以改变它的使用方式……”

然而,这种演变并不完全取决于他自己一个人。在接近尾声的一节中 ,Stroustrup 承认了标准化工作组 WG21,以及它将不可避免地在语言变化的程度上发挥的作用。

“我并不愿意对未来做出预测,”Stroustrup 写道,“部分原因是这本身就很危险,特别是因为 C++ 的定义由一个庞大的 ISO 标准委员会控制,该委员会以共识为基础。”

“我上次查看时,会员名单上有 527 人。这表明了热情、广泛的兴趣,并提供了广泛的专业知识,但这对于编程语言设计来说并不理想,而且 ISO 规则不能进行重大修改。”

然而,当谈到那些关键的受众时,“有些人不了解历史,因此错过了关键点,”Stroustrup 这样说,“例如指南和配置文件是否符合 C++ 的长期发展方向。”所以他正在采取措施培训他们,“要做到这一点,我必须展示关键特性适合什么地方。”

他这篇详尽的文章确是一个很好的开始——但它也只是多管齐下努力的一部分。最终,它可能会改变整个 C++ 生态系统的发展轨迹,同时也为程序员带来他们一直渴望的高性能、类型安全且灵活的语言。

而这一切,也正是在实现 Stroustrup 自 20 世纪 80 年代以来一直坚持的目标的同时……


呼吁紧急行动


Stroustrup 也直接与 WG21 进行了沟通。


有多家技术媒体和社区引用政府的建议,这样宣传,“过去三四年来,行业和政府网络安全专家一直在劝阻使用 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 月发布的版本)“更接近”他最初的理想。


《C Plus Plus 的设计和演化》一书的封面,来源:stroustrup dot com

他在敦促 WG21 采用 Profiles 的说明中也强调了这一点:

“正如我之前所说,这也是一个机会,因为类型安全和资源安全(包括内存安全)从一开始就是 C++ 的主要目标。

我对此处深有感触。但请不要被我相对平静的语言所欺骗。”

Stroustrup 的文章也指出,语言不断发展的一个问题是“很多人对 C++ 的看法过时了”。“今天,我们仍然看到无数人提到 C/C++ 认为这是一种神秘的语言,通常认为 C++ 是 C语言的一个小扩展,包含了 C 的所有糟糕方面,并且还严重滥用了复杂的 C++ 特性……”

Stroustrup 一再向人们强调说,C++ 仍在不断发展中,还有很多“正在进行的工作”和可用于改进的实验性特性,例如异步计算和SIMD 的通用模型等好东西。

“一个严重的问题是,如何将不同的思想整合成一个连贯的整体,”Stroustrup这样写道,“与大多数软件项目并不相同,也与学术界的大多数计算机科学工作不同。设计一种编程语言需要在一个并非所有相关因素都已知的领域做出决策,并且公认的结果中要几十年内都不要发生重大变化。”

当然,现在这成了一个难题,而且是一个已知问题。“几十年来几乎所有的语言设计努力都失败了,这一事实表明了这个问题的严重性。”

但这并不意味着 C++ 就停止了进化的尝试……


C++之明显的改进


配置文件并不是 21 世纪 C++ 改进的唯一方式。


Stroustrup 这样说道:“我还要指出,模块是一种使代码更简洁、编译时间大大缩短的机制,导入已编译的模块比使用老式的#include语句可以提高7 到 10 倍的速度优势” 。


“大多数人现在都可以通过使用 C++23 提供的功能来显著改进他们的代码,”


他还展望未来,预测未来还会有更多性能增强功能。“在 C++26 中,我们可能会看到改进的并发支持、静态反射和契约,以及许多小改进和标准库组件。”


这种前瞻性的希望或许可以解释为什么 Stroustrup 希望将他对 Profiles 的呼吁建立在 C++ 的更久远的历史中。


Stroustrup 的文章“展示了 C++ 的发展方向。安全保障即将到来,这在 C++ 的背景下并不是一个新奇的想法,而是长期目标的一部分。完全类型安全和资源安全是 C++ 的最初目标之一,但推动广泛的应用领域向前发展需要时间,而且必须逐步完成。”


他意识到已安装的代码库已经非常广泛, C++“如今已覆盖了广泛的应用领域。安全保障必须且将解决那些已使用 C++ 来提供高质量应用程序的领域。


“关注内存安全的人们应该注意到,C++ 并不是 C,并且基于更安全的编程风格和强化库的解决方案已经在 C++ 中广泛部署。”


结语


现在还不能表明他的ACM文章是否产生了影响,这显然很难量化。“我不愿意对未来做出预测,”Stroustrup 如此说道,“但我们已经看到以概念形式出现的对通用编程的更好支持。”


Stroustrup 指出,如果开发者正在寻找有影响力的改进,你也可以超越语言本身。目前有各种各样的工具可供 C++ 开发人员使用。


“语言不仅仅是你在语言规范或正式标准中找到的东西。”


作者:洛逸

评论