最近, Bjarne Stroustrup (设计并最初实现 C++ 的作者)公开的一份草案引发了一场激烈讨论,讨论的话题围绕着 C++17 的设计目标以及可能加入的新特性。据 Stroustrup 说,C++17 将会有以下三个设计目标:
- 改善对大规模可靠软件的支持。
- 支持更高级的并发模型。
- 简化语言核心。
针对以上的每个设计目标,Stroustrup 列举了可加入 C++17 的新特性。以下列举一些可能成为 Stroustrup 首选的特性:
- 模块,增强局部性并优化编译时间;
- 契约,改进规范;
- 安全的 union 类型,可用于函数式编程风格的模式匹配;
- 概念
- 范围
- 统一调用语法,简化规范,简化对模板库的使用;
- 协程,也就是可恢复函数;
- SIMD(单指令多数据 Single Instruction Multiple Data)向量,可以更好地利用现代硬件。
Stroustrup 警告人们不要陷入 C++17 的定义误区,列表中这些相关语言特性和标准库组件不一定可以清晰描述 C++17 未来的发展方向。真正重要的是,C++17 与 C++14 不同,这一版将作为主要版本发布,所以它需要承载一些能帮助用户更好地使用这门语言的“三两个主要特性”,例如:概念、模块和范围。
有趣的是,文档中同时也在尝试阐明 C++17 拒绝发展的方向,Stroustrup 为此特意列举了一个不受欢迎列表:
- 将 C++ 转换为一个本质上不同的语言,或提供一系列高阶隔离子语言。
- 为了与“每一门其它语言”竞争或让 C++ 支持一个新“范式”而给它增加新特性。
- 增加语言的复杂度,或限制它解决“最苛刻的系统编程任务”的能力。
InfoQ 借此机会采访 Stroustrup。
你能简单评论一下 C++17**** 特性列表么?你心目中是否已有一个性能实现的优先级列表?
概念将改变我们对泛型编程的看法,使泛型编程逐渐成为主流趋势。大家经常抱怨 C++ 的错误消息提示,这是无可厚非的事实,所以概念也将努力提高错误消息的质量。我们需要将概念加入标准库以使它的影响最大化。
模块应极大地改善编译时间,并限制过度使用宏造成的负面影响,打造更好的 C++ 工具。
使用更高级的并发模型编写并发代码比使用低阶的线程和锁的方式更容易,生成的代码运行速度更快。
这些特性可以简化代码,进而提高代码质量,所以非常理想化。
** 委员会在过去几年中为 C++17**** 做出许多贡献,并计划在未来进一步改进,看起来多亏了他们的努力,C++**这门语言才能逐渐克服一些它最具争议的局限性,这证明委员会在这个过程中确有所为。你是否愿意评价委员会一直以来所做的工作?如此成功的背后有什么秘诀?
你必须面对“委员会设计”带来的问题,召集 100 多人(如果算上未出席会议但参与讨论的差不多 300 人左右)共同创造一些可靠的新东西是一项艰巨的任务。
令人吃惊的是,我们经常采用一些管理手段。的确,有很多事实证明我们本可以做得更好,委员会的工作也可能令人感到沮丧,但是让一个人来管理这么多人显然不可能。这不是委员会与个人的问题,而是如何运营委员会的问题,我们无法避之不谈。当今世界中很少有单一个体可以完成的重要工作。
**C++17**** 证实了 C++**** 本质上要成为一门复杂的多范式底层语言(底层意味着允许使用非常细的粒度控制语言语义)。在此基础上,委员会仍然不断努力使 C++**** 更易用。你能为我们阐述一下更易理解的 C++**背后的语言哲学么?
我们不应该考虑 C++ 的阶级属性,而应该把它当做这样一门语言:拥有直接操作硬件的卓越本领;具备一系列抽象机制,允许我们根据自身需求提高抽象等级。许多重要任务需要依赖临近硬件的编程,但偏向于底层的编程体验相对较差,C++ 可以帮助我们远离硬件,零开销的抽象无需我们增加任何成本。与直接编写机器码相比,“零开销抽象”不浪费任何一个字节和循环。通常,一个函数调用(尤其是一个间接函数调用)的开销非常大,C++ 可以提供硬件访问和抽象,同时也可以高效地解决类似的问题。相比其它语言,C++ 有着巨大的性能优势。
我不再称之为“多范式”语言。我发现这一定义让许多人只是简单地选用其中一个范式,他们没有发挥 C++ 全部的力量。不幸的是,我所做的工作目前还没有一个很好的流行定义。
委员会有他们的哲学观听起来不太公平,我们是在多种背景下成长的不同个体,我们的看法自然有所不同。我上面描述的是大多数人赞同的 C++,那正是 C++ 绝不会向异议妥协的奠基之道。我们必须严格统一语言的向下兼容性,C++ 委员会渴望进一步改进,但他们真的不希望自己那数十亿行代码失去作用。关于语言的改进,这些至关重要:哪些改进更有效,哪些改进在合理的时间尺度可行,如何将这些改进表达为语言的一部分,标准库如何定义。让这么多人在这些细节上达成一致无比艰难,我们又不得不给出最终方案,因此我写下这篇综述报告,并且我们将在下次会议上讨论相关问题。
我花费了大量时间在 C++ 及其标准化上,因为它是许多行业最重要的一部分:计算机、半导体、运输业、电信业、金融业、制造业、航空航天、娱乐业,还有许多其它行业。在大多数至关重要的系统和配件的内部,C++ 发挥着重要作用,它能为科学事业构造软件系统,做出微不足道的贡献,以上的这一切激励着我继续前行。C++ 是一个注定被用来构建重要构件的工具。
很久之前网上流传了一份 Stroustrup 在会议上的发言概要,引发了大规模讨论( reddit / Hacker News / The Register ),这份草案是后续的补充。
查看英文原文: Stroustrup: Thoughts on C++17 - An Interview
感谢张龙对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。
评论