对 C++ 的忧虑?C++ 创始人警告:关于 C++ 的某些未来计划十分危险

2024年 7月 18日 71.6k 0

对 C++ 的忧虑?C++ 创始人警告:关于 C++ 的某些未来计划十分危险-1

今年早些时候,我们对 Bjarne Stroustrup 进行了采访。他是 C++ 语言的创始人,摩根士丹利技术部门的董事总经理,美国哥伦比亚大学计算机科学的客座教授。他写了一封信,请那些关注编程语言进展的人去“想想瓦萨号!”

这句话对于丹麦人来说,毫无疑问,很容易理解。而那些对于 17 世纪的斯堪的纳维亚历史了解不多的人,还需要详细说明一下。瓦萨号是一艘瑞典军舰,由国王 Gustavus Adolphus 定做。它是当时波罗的海国家中最强大的军舰,但在 1628 年 8 月 10 日首航没几分钟之后就沉没了。

对 C++ 的忧虑?C++ 创始人警告:关于 C++ 的某些未来计划十分危险-2

巨大的瓦萨号有一个难以解决的设计缺陷:头重脚轻,以至于它被一阵狂风刮翻了。通过援引这艘沉船的历史,Stroustrup 警示了 C++ 所面临的风险 —— 现在越来越多的特性被添加到了 C++ 中。

我们现在已经发现了好些能导致头重脚轻的特性。Stroustrup 在他的信中引用了 43 个提议。他认为那些参与 C++ 语言 ISO 标准演进的人(即所谓的 WG21 小组)正在努力推进语言发展,但成员们的努力方向却并不一致。

在他的信中,他写道:

分开来看,许多提议都很有道理。但将它们综合到一起,这些提议是很愚蠢的,将危害 C++ 的未来。

他明确表示,他用瓦萨号作为比喻并不是说他认为不断提升会带来毁灭。我们应该吸取瓦萨号的教训,构建一个坚实的基础,从错误中学习并对新版本做彻底的测试。

在瑞士 拉普斯威尔 Rapperswill 召开 C++ 标准化委员会会议之后,本月早些时候,Stroustrup 接受了 The Register 的采访,回答了有关 C++ 语言下一步发展方向的几个问题。(最新版是去年刚发布的 C++17;下一个版本是 C++20,预计于 2020 年发布。)

*Register:*在您的信件《想想瓦萨号!》中,您写道:

在 C++11 开始的基础建设尚未完成,而 C++17 基本没有在使基础更加稳固、规范和完整方面做出改善。相反,却增加了重要接口的复杂度(原文为 surface complexity,直译“表面复杂度”),让人们需要学习的特性数量越来越多。C++ 可能在这种不成熟的提议的重压之下崩溃。我们不应该花费大量的时间为专家级用户们(比如我们自己)去创建越来越复杂的东西。(还要考虑普通用户的学习曲线,越复杂的东西越不易普及。)

对新人来说,C++ 过难了吗?如果是这样,您认为怎样的特性让新人更易理解?

*Stroustrup:*C++ 的有些东西对于新人来说确实很具有挑战性。

另一方面而言,C++ 中有些东西对于新人来说,比起 C 或上世纪九十年代的 C++ 更容易理解了。而难点是让大型社区专注于这些部分,并且帮助新手和非专业的 C++ 用户去规避那些对高级库实现提供支持的部分。

我建议使用 C++ 核心准则作为实现上述目标的一个辅助。

此外,我的“C++ 教程”也可以帮助人们在使用现代 C++ 时走上正确的方向,而不会迷失在自上世纪九十年代以来的复杂性中,或困惑于只有专家级用户才能理解的东西中。这本即将出版的第二版的“C++ 教程”涵盖了 C++17 和部分 C++20 的内容。

我和其他人给没有编程经验的大一新生教过 C++,只要你不去深入编程语言的每个晦涩难懂的角落,把注意力集中到 C++ 中最主流的部分,就可以在三个月内学会 C++。

“让简单的东西保持简单”是我长期追求的目标。比如 C++11 的 range-for 循环:

for (int& x : v) ++x; // increment each element of the container v

v 的位置可以是任何容器。在 C 和 C 风格的 C++ 中,它可能看起来是这样:

for (int i=0; i

相关文章

Linux 命令行的聊天工具 CenterIM
Linux 桌面年仍未到来 但 Linux 移动之年已到来
12 个在线学习 Linux 技能网站
Linux Mint : 会是另一个新的 Ubuntu 吗?
W3Conf 开发者大会将于下周召开
Ubuntu 10.04 ARM 处理器上网本版本结束服务期

发布评论