展会信息港展会大全

C++ 之父 2024 炉边谈话:现代 C++ 设计哲学、技术变革与安全争议
来源:互联网   发布日期:2024-12-12 08:18:09   浏览:211次  

导读:作者 | 《新程序员》编辑部出品 | CSDN(ID:CSDNnews)如果说系统软件是软件领域的皇冠,那么 C++ 就是皇冠上的珍珠。在四十余载的技术变迁中,C++不断拓展其应用边界。近年的编程语言排行榜上,C++一骑绝尘超越 Java,并在今年六月领先 C 语言,居编程语言排行榜第二位。同时,随着大模型重塑计算范式和开发范式,业界对软件安全性的重视前所未有,软件开发迎来全新的篇章。 ......

作者 | 《新程序员》编辑部出品 | CSDN(ID:CSDNnews)如果说系统软件是软件领域的皇冠,那么 C++ 就是皇冠上的珍珠。在四十余载的技术变迁中,C++不断拓展其应用边界。近年的编程语言排行榜上,C++一骑绝尘超越 Java,并在今年六月领先 C 语言,居编程语言排行榜第二位。同时,随着大模型重塑计算范式和开发范式,业界对软件安全性的重视前所未有,软件开发迎来全新的篇章。

C++ 之父 2024 炉边谈话:现代 C++ 设计哲学、技术变革与安全争议

在这样的背景下,12 月 5-6 日的「2024 全球 C++及系统软件技术大会」邀请C++之父、美国国家工程院、ACM、IEEE 院士 Bjarne Stroustrup 跨洋连线,发表主题演讲《重新认识 C++:跨世纪的现代演进》,并在炉边谈话环节同与会者展开了一场精彩的对话。

在这场由 CSDN 高级副总裁李建忠与 Codeplay 技术副总裁 Michael Wong 主持的一小时炉边对话中,Stroustrup 在纽约的家中,展现出了一位技术领袖的深邃思考,回答了与会者提出的一系列关键问题。这些问题涵盖了技术选择、工程实践、人才培养等多个维度,字里行间流露出他对编程语言、软件系统的深刻理解,以及对技术演进规律的独到见解。

核心议题

从贝尔实验室到 AI 时代的技术沿革

当代软件开发中的安全实践

编程语言的设计哲学与取舍

人工智能时代的计算架构变革

回应白宫与 Rust 社区对 C++ 安全性的质疑

新语言的兴起对社区生态的影响

C++ 标准演进中的代际更迭

新一代程序员的成长之道

以下为对话实录:

第一问:如何看待 C++ 被质疑“不够安全”?Michael Wong:在您的演讲中,您详细探讨了 C++ 的安全规格配置和指南。与现代强调安全特性的编程语言(如 Rust)相比,C++ 常被批评“不够安全”。您如何看待这种观点?C++ 在维持自身特色的同时,正在采取哪些措施来应对这些挑战?

Bjarne Stroustrup:如果我们采用现代 C++ 的编程方式,严格遵循《C++ 核心指南》(The C++ Core Guidelines),很多安全问题就不会出现。举个例子,我已经很多年没有遇到未被捕获的数组越界问题了。在教学实践中,尽管我现在较少亲自授课,但当其他教师使用我的教材时,我都建议使用范围检查库。我们会确保所有操作都有范围检查保护,因为没有人愿意看到学生们遭遇那些完全可以避免的缓冲区溢出错误。所以基本原则很简单:不要固守旧的编程方式,要拥抱现代 C++,它是安全的。

我们的终极目标是实现类型安全和资源安全,现在这个目标已经触手可及。当前的主要挑战在于缺乏完善的施行机制。虽然我们已经有了一些执行机制,但我们希望能做得更好,并将其标准化。这正是我目前的工作重点将配置文件的概念引入语言,并建立初始的配置文件集。一旦这项工作完成,C++ 的安全性将超越大多数所谓的现代语言。说实话,那些现代语言也并不像它们宣称的那样安全,它们的安全保证往往是不完整的。比如说,它们缺乏资源安全性。在这些语言中,仅仅通过泄漏文件句柄或线程句柄就可能导致系统崩溃。这显然不是我们想要的结果。而且,这些标榜安全的语言在处理一些底层任务时,比如硬件操作、设备驱动程序开发、系统调用等,往往还是要依赖 C 语言。而 C++ 本来就应该能够处理这些工作,这是它的核心职责之一。因此,我们不能也不应该把这些工作交给其他语言。诚然,这使得提升 C++ 的安全性变得更具挑战性,但这个目标是可以实现的。

最关键的问题是时间。要知道,推动一个拥有六七百万开发者、数十亿行代码的庞大社区转型,比创建一个适用范围较窄的新语言要困难得多。那些新语言容易在特定领域展示某些安全特性,但 C++ 面临的挑战更加综合。我始终认为,安全性是一个多面的概念。我就列举过大约十种不同的安全方法,它们在不同场景下、对不同用户都有其特殊的重要性。我们需要能够实现多种安全概念。如果认为内存安全就是全部,这种想法过于片面。我们追求的是全面的类型安全和资源安全。

第二问:C++ 真的过于复杂了吗?李建忠:C++ 的复杂性一直是业界争论的焦点。在您的演讲中,您展示了现代 C++ 如何实现更高的安全性、更好的简洁性和更快的性能。但很多人,特别是新手,仍然觉得 C++ 过于复杂。您如何看待这种观点?您认为应该如何提升 C++ 的易用性?

Bjarne Stroustrup:这个问题值得仔细思考。首先,我们要认识到,很多对 C++ 的批评并不那么客观公正。比如,有些批评针对的是一些 C 语言风格的用法,而这些用法在过去 20 年里就已经被优秀的 C++ 程序员摒弃了。当然,我也承认 C++ 确实很复杂,如果有人试图掌握它的所有细节,学习过程必然会很困难。我经常遇到程序员说“我想了解所有的东西”,但我总是告诉他们,这没有必要,我自己也不需要知道所有细节。这正是为什么我们有 CppReference(cppreference.com) 这样的参考资料,当需要查询某个标准函数的具体参数时,随时可以去查阅

我认为更重要的是理解语言的基础原理,掌握那些能够帮助我们更好地解决问题、开发软件的核心功能。我们应该专注于在这些基础特性和核心库的框架内工作。这也是我们制定《C++ 核心指南》并在此基础上发展配置文件的原因,我们希望帮助开发者专注于 C++ 最安全、最实用、最易维护的部分。之前我也提到过,开发者们一方面要求语言简单,另一方面又需要更多特性,同时还想保持兼容性。在这三个诉求之间找到平衡确实很有挑战。

我认为解决方案在于:保持语言本身的稳定性和兼容性,同时帮助人们更好地使用现代 C++ 特性,也就是我今天演讲中提到的这些内容。不过目前 C++ 的开发工具链还有提升空间。这些年来,我一直在呼吁开发更好的构建系统和包管理工具。虽然这个目标还没有完全实现,但进展是明显的。比如 CMake 就在不断改进,其他一些构建系统也在变得越来越好。只是这些工具还没有成为标准,我相信在这方面我们还能做得更好。

第三问:C++ 的哪些发展超出了您的预期?Michael Wong:回顾 C++ 从“带类的 C”(C with classes)到今天的发展历程,什么最让您感到意外?现在的一些应用场景是否超出了您最初的设想?

Bjarne Stroustrup:最让我感到惊讶的是 C++ 真的发展到了今天这样的规模。说实话,我最初并没有打算开发一门通用编程语言。我的初衷很简单,就是想编写一些代码,想要提前十年实现第一个 Unix 集群。但事情的发展出乎意料,我的同事们开始使用这门最初叫“带类的 C”的语言,后来它被命名为 C++。这对我来说是个巨大的惊喜。要知道,我们没有做任何宣传和营销,C++ 就这样自然地成长起来了。

如果看增长曲线,会发现它是指数级的在最初的 10 到 11 年间,每七个半月 C++ 的用户数量就翻一番。这太令人惊讶了,不过当时我忙于确保一切正常运转,没有太多时间去思考这些现象。

后来另一个转折点出现在 2000 到 2005 年间,C++ 社区出现了萎缩。这其实不难理解,因为当时美国政府、微软、Sun 都在大力推广其他编程语言。但更有趣的是接下来发生的事:这个下行趋势最终被扭转了。如果看今天的数据,我们又看到了一个指数增长曲线。虽然增长速度不再是每七个半月翻一番(具体数字我也没有相关数据来估计),但分析表明,这种反弹有其深层原因:开发者们不太愿意被限制在专有语言中。他们希望能够在所有平台上工作,希望同样的代码能运行在 Windows、Unix、Linux、Android 等各种环境中。虽然各个平台的拥有者都在推广他们自己的语言,但 C++ 这样能在各处都表现良好的语言反而成为了理想的解决方案。

与此同时,硬件发展也遇到了瓶颈。处理器速度不再持续提升,单线程性能停滞不前,有时甚至出现下降。在这种情况下,C++ 的优势再次凸显:优秀的 C++ 程序员能够实现比硬件升级更显著的性能提升,这也是推动 C++ 重新崛起的重要因素。

回过头来看语言特性,构造函数/析构函数这对配套技术,以及由此衍生的 RAII(资源获取即初始化),它们的重要性远超出了我最初的预期。这些特性是我在开发“带类的 C”的最初一两周就加入的,当时只是觉得显然需要它们,因为我有操作系统开发的背景。后来我才知道其他语言既没有多个构造函数,也没有析构函数这样的概念。但事实证明,这成为了 C++ 最有用、最成功的技术基石,也是解决许多性能问题的关键。

举个例子,当你使用基于作用域的资源管理时,就自然而然地最小化了资源的持有时间。这一点极其重要,因为如果资源(无论是线程、内存还是其他)的持有时间增加一倍,你就需要双倍的硬件资源来支撑。

第四问:大语言模型将如何影响 C++?李建忠:大语言模型正在给软件行业带来一场技术革命。您认为它会重塑编程语言吗?对 C++ 会产生怎样的影响?

Bjarne Stroustrup:我首先要声明,我并非 AI 大语言模型领域的专家。说到我与 AI 唯一的渊源,可能就是 TensorFlow 这类 AI 工具是用 C++ 开发的这一点了。从某种意义上说,C++ 构成了当前 AI 技术的基础设施,这本身倒是一个意想不到的发展。我本该更早提到这一点的,但我对 AI 领域的了解确实有限。

不过我相信,大语言模型确实能帮助开发者处理许多重复性的日常工作。同时,我也认为(虽然这只是一种直觉,没有具体证据支持),仍然会有大量工作需要人的创造力,特别是在处理那些 AI 模型训练数据中未曾出现过的新问题时。

所以,如果要给开发者一个建议:专注于提升自己的编程能力,不要把精力过多投入到那些琐碎的、人人都在做的事情上。

第五问:过往版本中最自豪和最遗憾的设计决策是什么?贝尔实验室。在剑桥大学时,我遇到了几位很好的老师,其中

赞助本站

相关内容
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港