写点什么

Stroustrup 专访:畅想 C++17

  • 2015-05-21
  • 本文字数:2252 字

    阅读完需:约 7 分钟

最近, Bjarne Stroustrup (设计并最初实现 C++ 的作者)公开的一份草案引发了一场激烈讨论,讨论的话题围绕着 C++17 的设计目标以及可能加入的新特性。据 Stroustrup 说,C++17 将会有以下三个设计目标:

  • 改善对大规模可靠软件的支持。
  • 支持更高级的并发模型。
  • 简化语言核心。

针对以上的每个设计目标,Stroustrup 列举了可加入 C++17 的新特性。以下列举一些可能成为 Stroustrup 首选的特性:

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 读者交流群)。

2015-05-21 05:345955
用户头像

发布了 63 篇内容, 共 137.1 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

项目管理变更之关注要素变化

L3C老司机

谈谈敏捷开发中的文档

张老蔫

28天写作

连云港:“云底座”构建智慧教育的未来图景

懂分析、会预测,你见过这样的华为云DAS吗?

华为云开发者联盟

人工智能 sql 数据管理系统 智能运维 华为云DAS

Java内存模型(JMM)详解

Java 编程 面试

【并发编程的艺术】JAVA 原子操作实现原理

程序员架构进阶

架构 JVM Java内存模型 28天写作

Dubbo中的统一契约是如何实现的?

冰河

分布式 微服务 dubbo 服务注册与发现 服务治理

项目管理系列(7)-PMO有啥用

Ian哥

28天写作

在胡萝卜和大棒失效的当下,如何焕发员工的热情?

一笑

团队管理 管理 驱动力量 28天写作

接到需求,你要先做哪件事?

熊斌

学习 需求分析 28天写作

如何使用docsify搭建自己的github文档?

秦怀杂货店

GitHub Pages

人类为啥要睡觉?

Justin

心理学 28天写作 睡眠

AWS CDK | IaC 何必只用 Yaml

郭旭东

AWS 基础设施即代码 IaC

Django报错:"Key 'id' not found in 'xxx'. Choices are: xxx"

BigYoung

Python django

快乐的开始还是痛苦的开始?

Nydia

Elasticsearch document 的 _source 元数据

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

2020我写了什么?

秦怀杂货店

编程 思考

如果不完美,接受就好了「14/28」

道伟

28天写作

关于低代码的进一步思考

lidaobing

低代码 28天写作

Soul 学习笔记---使用 nacos 实现数据同步上篇(七)

fightingting

Soul网关

刷屏的微信8.0(文末附安卓下载链接) | 视频号 28 天 (15)

赵新龙

28天写作

28天瞎写的第二百二十五天:通过打游戏维护客户关系的故事

树上

28天写作

拥抱变化

阿萌

28天写作

重学JS | 一文看懂浏览器数据库IndexedDB详细操作

梁龙先森

大前端 编程语言 28天写作

Soul 源码阅读 02|WebSocket建立连接的过程

哼干嘛

【CSS】内圆角(box-shadow、outline)

德育处主任

html5 大前端 Web CSS小技巧 28天写作

数字货币交易所系统开发|数字货币交易所软件APP开发

系统开发

​Infura - 共识问题

谢锐 | Frozen

Rebase Ethereum blockchain web3 hackers infura

赤裸裸地监视,亚马逊的员工没有隐私

李忠良

28天写作

国内新能源车厂商的小白认知 (28天写作 Day14/28)

mtfelix

自动驾驶 28天写作 新能源汽车

大数据知识专栏 - MapReduce 的 Map端Join

小马哥

大数据 hadoop mapreduce 七日更

Stroustrup专访:畅想C++17_C++_Sergio De Simone_InfoQ精选文章