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

Stroustrup专访:畅想C++17相关推荐

  1. C++的最后一道坎|百万年薪的程序员

    | 导语 C++ 的起源可以追溯到 40 年前,但它仍然是当今使用最广泛的编程语言之一,C++发明人Bjarne Stroustrup 一开始没想到 C++ 会获得如此大的成功,他说:"C+ ...

  2. 权威的C ++书籍指南和清单

    这篇文章是社区维基 . 编辑现有答案以改善此职位. 它当前不接受新的答案. 这个问题试图收集每年出版的数十本糟糕的C ++书籍中的珍珠. 与许多其他编程语言不同,这些语言通常是在Internet上的教 ...

  3. C ++ 的 背 影

    C ++ 的 背 影 --C++之父Bjarne Stroustrup印象 左轻侯 2002.11.4 热爱C++的朋友请不要误会,我并不是在暗示"C++已经日薄西山",或者任何类 ...

  4. 专访 IJCAI 17 杰出青年科学家夏立荣博士:以人为本,是群体决策的必由之路

    本文讲的是专访 IJCAI 17 杰出青年科学家夏立荣博士:以人为本,是群体决策的必由之路, 在 IJCAI 2017的 Early Career Spotlight 环节上,共有15位来自全球各地的 ...

  5. 专访长亮科技李劲松:17年金融IT服务商的海外新机遇

    "就互联网化程度而言,目前的东南亚市场相当于中国七八年前的样子" 长亮科技集团总裁李劲松对雷锋网AI金融评论表示,一方面线上业务还未成为一个全社会的氛围,互联网支付和流量巨头还未出 ...

  6. 专访长亮科技李劲松:17年金融IT服务商的海外新机遇...

    "就互联网化程度而言,目前的东南亚市场相当于中国七八年前的样子" 长亮科技集团总裁李劲松对雷锋网AI金融评论表示,一方面线上业务还未成为一个全社会的氛围,互联网支付和流量巨头还未出 ...

  7. C++之父 Bjarne Stroustrup

    人物简介 Bjarne Stroustrup(本贾尼·斯特劳斯特 卢普)博士, 1950年出生于 丹麦,先后毕业于丹麦阿鲁斯大学和英国 剑桥大学,AT&T大规模程序设计研究部门负责人,AT&a ...

  8. C++之父B.Stroustrup近期言论

    [译者按]  Bjarne Stroustrup博士,1950年出生于丹麦,先后毕业于丹麦阿鲁斯大学和英国剑桥大学,AT&T大规模程序设计研究部门负责人,AT&T.贝尔实验室和ACM成 ...

  9. 转载:Bjarne Stroustrup百科

    编辑本段B. S在自己主页上发表的FAQ 1. 请谈谈C++书. 没有,也不可能有一本书对于所有人来说都是最好的.不过对于那些真正的程序员来说,如果他喜欢从"经典风格"的书中间学习 ...

  10. C++之父B.Stroustrup言论

    C++之父B.Stroustrup言论(译者:孟岩,来自侯捷老师主页) C++之父B.Stroustrup言论(译者:孟岩,来自侯捷老师主页) 本文仅用于个人学习,任何商业网站未经孟岩和侯捷老师允许请 ...

最新文章

  1. Java 垃圾回收机 GC Roots详解(Garbage Collection Roots)
  2. leetcode 144. Binary Tree Preorder Traversal ----- java
  3. python网络编程系列
  4. Java并发编程:Lock(下)
  5. JAVA实现SHA256算法
  6. 禁用计算机端口,电脑如何关闭445端口
  7. 数字图像处理 信息隐藏 LSB算法
  8. 裸设备和Oracle问答20例
  9. python生存分析入门
  10. Linux 环境部署|Anaconda及Tensorflow
  11. IE浏览器打不开jupyter notebook网页的解决办法
  12. Ubuntu16.04安装GTX960闭源驱动(Dell XPS 9550)
  13. 传统的6d位姿估计fangfa1_6D姿态估计算法汇总(上)
  14. elementUI中el-upload上传文件时附带额外参数传递
  15. 深度分析拼多多的首场618战事:“猫拼狗“的快打旋风
  16. 转帖--IT圈子里鬼混---谈谈IT行业的收入和一些生存之道!
  17. pdf怎么编辑连续页码
  18. 7.23翻倍奖励——滴滴快车单(成交率≥60%,≥5指派单)
  19. 【解答】多台西门子PLC之间可不可以无线通讯
  20. maven系列(二)——maven应用分析

热门文章

  1. 【机器学习系列】变分推断第二讲:基于Mean Field的变分推断解法
  2. 深度学习斯坦福cs231n 课程笔记
  3. 【算法竞赛进阶指南 0x31 质数】阶乘分解【唯一分解定理】
  4. 快速突破面试算法(内含从简到难的高频题型目录及每题的详解,已经归类整理好并外带博主的免费答疑)
  5. 反射机制,从为什么讲起,更容易接受
  6. 无法打开配置文件vmx_如何解决Windows照片查看器无法显示此图片
  7. 修饰符new与override
  8. Sublime Text 3.1.1 Build 3176 注册码破解
  9. three.js 中的矩阵变换及两种旋转表达方式
  10. C#匿名委托,匿名函数,lambda表达式