Qwen3 惊喜上线阿里云百炼,8款模型全开源!点击免费领取 800万 tokens! 了解详情
写点什么

74 岁 C++ 之父最新蓝图:让代码更安全,还能兼容 40 年前的老程序!

  • 2025-05-15
    北京
  • 本文字数:3081 字

    阅读完需:约 10 分钟

大小:1.48M时长:08:36
74 岁 C++ 之父最新蓝图:让代码更安全,还能兼容40年前的老程序!

本文最初发布于 THENEWSTACK 博客。


图片来源:维基百科


C++ 仍在不断发展,但许多开发者的使用方式似乎还停留在上个世纪。Bjarne Stroustrup 表示:“我希望整个社区,尤其是 WG21 的成员,能了解我对 C++ 未来发展的看法。”


这位 74 岁的 C++ 创建者用 40 年的时间见证了他在 1985 年设计的这门语言的成长。


为了推动一些渴望已久的特性,上个月,Stroustrup 在《ACM 通信》上发表了“21 世纪的 C++”一文(https://cacm.acm.org/blogcacm/21st-century-c/)。这篇长达 6300 字的文章旨在展示现代化的、类型安全的 “21 世纪 C++ ”中的一些“关键概念”,以便可以创建 “C++ on steroids”。例如,在文中,Stroustrup 着重介绍了长期以来一直在尝试的方法,如使用 guideline-enforcing 配置文件编写更安全的代码。为了与几十年来已经编写的 C++ 代码保持兼容,“我们不能改变语言,但我们可以改变它的使用方式…”,Stroustrup 写道。


然而,这种演变并不完全取决于他自己。在文章末尾,Stroustrup 提到了 WG21(标准化工作组),以及它将如何不可避免地对语言的变化产生影响。Stroustrup 写道,”我不愿意对未来做出预测,部分原因是这本身就很冒险,更重要的是因为 C++ 的定义是由一个庞大的 ISO 标准委员会基于共识来管理的。“


“我上次看时,会员名单上有 527 条。这表明大家有着很高的热情和广泛的兴趣,并且提供了广泛的专业知识,但对于编程语言设计来说,这并不理想,而且 ISO 的规则也无法进行大幅修改"。


尽管如此,对于关键受众,Stroustrup 告诉 TNS,“有些人缺乏历史感,忽略了一些关键点。例如,指南和配置文件要符合 C++ 的长期发展方向。“因此,他正在采取措施教导他们。”为此,我必须说明关键特性的适用范围”。


他这篇内容详尽的文章是一个很好的开始,但也只是众多措施中的一种。最终,它将改变整个 C++ 生态系统的发展轨迹,同时为程序员带来他们渴望已久的高性能、类型安全和灵活的语言。


在完成这一切的同时,Stroustrup 也实现了自己从上世纪 80 年代起就一直坚持的目标…

呼吁采取紧急行动

Stroustrup 还直接与 WG21 进行了沟通。The Register 指出,“过去三四年来,业界和政府的网络安全专家一直在劝阻人们使用 C 和 C++,同时鼓励人们使用具有更好内存安全性的语言”。因此,在发表这篇文章三天后,Stroustrup 给 C++ 标准委员会留下了一份官方说明,他将其描述为 “呼吁采取紧急行动,部分是为了应对 C++ 所受到的前所未有的严重攻击”。


“我认为, WG21 需要做一些有意义的事,并让人们看到它在做这件事。Profiles 是一个可以实现这一目标的框架。“


Stroustrup 的观点很明确。他在文章中写道:“指南没问题,也有用处,但在一个庞大的代码库中,要始终如一地遵循它们基本上是不可能的。我们需要的是一种执行机制,它能标记并防止诸如悬空指针、范围错误和 nullptr 解引用等问题。”


幸运的是,这样的执行机制已经以执行准则配置文件的形式提供了。参考资料部分提供了在 Visual Studio 2019 中使用这些配置文件的示例。它实现了 “Lifetime” 配置文件的早期版本,可检查 C++ 对象生命周期中的悬空指针和引用以及其他常见错误…


一般来说,每个配置文件通常都是在编译时验证要求是否得到满足,是否实现了特定的效果。除了 “Lifetime” 检查配置文件,他们还计划推出更多配置文件,包括 “Bounds” 配置文件,以便确保所有访问数组的代码都包含范围安全检查。


在我们的电子邮件采访中,Stroustrup 指出,通过 2020 年推出的新 span 类模板,C++ 已经为防止范围错误提供了更好的支持。Bounds Profile 只是为了确保这些用于保证边界安全的功能确实已经执行到位。


Stroustrup 告诉我:“其中很多都是标准的,现在就可以使用“。此外,他们还计划推出其他几个配置文件,从而帮助开发人员避免代码中的类型或算术错误。Stroustrup 认为:”在不久的将来,Profiles 将为各种约束的执行提供一个框架。“


希望这能为 C++ 提供人们所期待的安全保证。不过,这也是 40 年前 Stroustrup 最初的 C++ 构想的一个自然发展过程。

“更好的近似”

像类型安全等特性一直是 Stroustrup 为 C++ 设定的安全和性能目标之一。


他在文章中写道:“这一点从一开始就没有变过”,并在参考资料中向读者介绍了他 1994 年出版的《C++ 语言的设计与演化》一书。但是,当代 C++ 比早期版本更好地实现了这些长期目标,其中一部分原因是这种语言“从设计之初就在不断发展”,Stroustrup 在文章末尾写道。因此,经过几十年的改进,他将 C++ 23(10 月份发布的版本)这样的 “当代 C++”称为他最初理想的 “更好的近似”。



在敦促 WG21 采用 Profiles 的说明中,他也强调了这一点:“正如我之前所说,这也是一个机会,因为类型安全和资源安全(包括内存安全)从一开始就是 C++ 的关键目标"。


“对于这一点,我的感受很强烈。请不要被我相对平静的语言所迷惑"。


Stroustrup 在文中指出,语言不断发展的一个问题是“许多人对 C++ 的理解已经过时。如今,我们仍然可以看到人们不断地提及神话语言 C/C++,这通常意味着,人们认为 C++ 是 C 语言的一个次要扩展,包含了 C 语言所有最糟糕的方面,以及对 C++ 复杂特性的怪异滥用…” 但是,C++ 仍在继续发展,Stroustrup 强调说,C++  “正在进行中的工作”及实验性功能已经可以改进异步计算通用模型和 SIMD。


Stroustrup 写道:“一个严重的问题是,如何将不同的想法整合成一个连贯的整体。与大多数软件项目——甚至是学术界的大多数计算机科学工作——不同,设计一种语言需要“在一个并非所有相关因素都能为人所知的空间里做决定,而且接受以后数十年内都不会有重大改变”。


简而言之,这是一个棘手的问题——这仍然是一个已知的问题。“几十年来,几乎所有的语言设计工作都以失败告终,这说明了这个问题的严重性“。


但这并不意味着 C++ 要不再尝试进化…

显著改进

Profiles 并不是 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 说:"我不愿意对未来做预测,但我们已经看到,泛型编程已经从 concepts 中获得了更好的支持。”


Stroustrup 指出,如果你正在寻求有效的改进,那么你也可以将目光投向语言之外。目前,有很多工具可供 C++ 开发人员选择。


“语言不仅仅是语言规范或正式标准中的内容“。


原文链接:

https://thenewstack.io/bjarne-stroustrup-on-how-he-sees-c-evolving/

2025-05-15 09:001

评论

发布
暂无评论

Java单元测试及常用语句

java易二三

Java 编程 程序员 计算机

深度 | 突破AI大模型工业化开发,生成式AI迎来全链条服务商

澳鹏Appen

人工智能 数据标注 大模型 生成式AI LLM

谁家面试往死里问 Swagger 啊?

程序员小富

Java springboot

独家首发!openEuler 主线集成 LuaJIT RISC-V JIT 技术

openEuler

lua Linux 操作系统 openEuler risc-v

Java并发编程(线程池篇)

java易二三

Java 程序员 线程池 计算机 科技

Apache Airflow Spark Provider 反序列化漏洞 (CVE-2023-40195)

墨菲安全

Apache 安全 漏洞情报

Dify 用户直面会:「Dify x 开源模型」的无限可能 & Baichuan 模型详解

Dify

LLMs LLMOps

MES在人工智能方面的应用

万界星空科技

人工智能 MES系统

FactoryBean 和它的兄弟SmartFactoryBean!

江南一点雨

Java spring

Footprint Analytics 与 COMBO 携手合作,将推动 GameFi 和 Web3 领域的数据驱动革命

Footprint Analytics

区块链 gamefi web3

生成式AI:AI赋能新时代

百度开发者中心

人工智能 生成式AI 文心一言

软件测试/测试开发丨文件上传与弹窗处理 学习笔记

测试人

Python 程序员 软件测试 自动化测试 测试开发

Footprint Analytics 已加入 Paima Web3 Engine 生态系统,帮助促进 Paima Engine 增长和采用

Footprint Analytics

区块链 web3

Microsoft Remote Desktop for Mac 远程连接工具推荐

胖墩儿不胖y

远程连接 微软远程桌面连接工具 Mac软件推荐 远程连接工具

74 岁 C++ 之父最新蓝图:让代码更安全,还能兼容40年前的老程序!_编程语言_David Cassel_InfoQ精选文章