C++20终于来了!

2020 年 9 月 11 日

C++20终于来了!

近日,国际标准化组织(ISO)C++ 组,21 工作组(WG21)正式通过了最终版本的“C++20”草案。

WG21 C++ISO 委员会常任主席 Herb Sutter 说:“在 9 月 4 日,C++20 的 DIS(国际标准草案)投票结束,并获得一致通过。”

“这意味着,C++20 现在获得了最终技术许可,并且完成了 ISO 投票。我们希望在完成最后一轮 ISO 编辑工作后,C++20 能在 2020 年底正式发布。”

从历史标准来看,2020 年的 C++ 版本非常庞大。Herb Sutter 表示,“它将是 C++ 自 C++11 以来最大的发行版”,这意味着它比过去 9 年来发布的 3 个发行版都要大。同时,这也是第一个已标准化的版本。

C++ 是一门速度很快的编程语言,因而备受青睐。近年来,由于它在操纵硬件方面的实用性而日益流行。

在 TIOBE 公布的 9 月编程语言排行榜中,C++ 成为增长最快的编程语言。

回顾历史,C++ 的巅峰时期是在 2003 年,当年 8 月,它在 TIOBE 的排名峰值为 17.53%,并夺得当年的年度编程语言奖。但 2005 年后,C++ 式微,在 2017 年处于历史低谷 4.55%。但是,与去年相比,C++ 如今是榜单中增长最快的编程语言。

TIOBE CEO Paul Jansen 认为,新的 C++20 标准带来了极大的正面影响,其积极趋势赶超其他编程语言。

在 C++20 中,最重要的两个特性是“模块 (Modules)”和“协程 (Coroutine)”。

据悉,模块(Modules)是由谷歌的 Richard Smith 提出的,它是针对头文件的改进,并在支持更大构建的同时有助于隔离宏的影响。

正如 Sutter 最近指出的那样,C++20 标志着”大约 35 年来,C++ 首次添加了新特性,用户可以在其中定义命名的封装边界“。

“到现在为止,我们有了三种这样的语言特性,让程序员可以(a)将一个用户定义的名称(b)给予某个隐藏自身实现的事物,从而创建自己“语言的力量”。它们是:变量(封装了当前值)、函数(封装代码和行为)和类(封装两者以同时提供一堆状态和函数)。”

协程(Coroutine)则表示一个函数的泛化。C++ 的贡献者在协程的提案中解释说:“常规函数总是在起始处开始,然后在结束处退出,而协程还可以中止执行,之后在中断的位置继续执行。”

在一次邮件采访中,C++ 之父 Bjarne Stroustrup 曾表示,“对许多人来说,协程是个新事物。为了从中受益,必须学习一种全新的风格。不过,我认为这样做是值得的,因为这样可以使并发编程更简单、更快速。”并且,他还提到“协程已经是 Facebook 许多应用程序的基础“。

对于 C++20,Bjarne Stroustrup 心怀期待。在去年 11 月,他因公出差来到中国上海,InfoQ 记者有幸对 Bjarne 博士进行了一次独家专访。在采访中,我们谈到了与 C++20 有关的几个问题。

他说,“我现在很有信心,C++20 会非常出色。我经常提到,C++11 用起来就像是一种全新的语言。C++20 的提升幅度要比 C++11 更大,它会带来全新的感觉。我可以提一下我认为对整个 C++ 社群而言会有极大帮助的特性,我觉得有两个。”

第一个特性是概念(Concepts),它是对范式编程中接口的精确规范,旨在提升范式编程的易行性与灵活性。因此,我们将看到更多的范式编程,代码呈现形式也将会有所变化。大家会获得更好的错误提示信息,并且可以更少地使用模板元编程。当然,编译速度也会更快。

另一个重要新特性是模块(Modules)。如果使用它整理代码,我们可以将代码编译速度大为提高(比如说快 5 倍以上),这一点非常重要。如此一来,大家就能够更迅速地完成编译而不需要在编译的间隙去喝咖啡打发时间了。同时,你也将消除更多的程序缺陷,因为你的代码将显得更加规整。

“我觉得再过几年,Concepts 与 Modules 会重要到让大家都觉得不可或缺。”他说。

除此之外,C++20 的新特性还包括范围、概念与约束(Constraints and concepts)、指定初始化(designated initializers)、计时、并行算法和对并发编程的一些改进等等。

在邮件采访中,他表示,“如果一个特性改变了我们对代码和软件开发的看法,那么我认为它就是一个主要的特性。”

当谈到对 C++20 的期望,Bjarne Stroustrup 称“C++20 将会非常棒!它有我为之奋斗了几十年的特性。我期望很多特性能够快速被采用。从 C++98 迁移到 C++11 很难,但是我们(标准委员会和实施者)在兼容性方面做得更好,所以从 C++11 迁移到 C++14 和 C++17 更容易。我希望向 C++20 的迁移会更容易一些。然而,如果你想从新的主要特性中获益,你确实需要修改代码。”

延伸阅读:

C++ 之父:爱吃辣子鸡,C++20 会非常出色丨极客档案

2020 年 9 月 11 日 19:00 10282
用户头像

发布了 437 篇内容, 共 163.0 次阅读, 收获喜欢 885 次。

关注

评论 5 条评论

发布
用户头像
看样是应对go的挑战啊,编译速度、協程。
2020 年 09 月 24 日 21:47
回复
用户头像
最后还是学习 Go 实现了协程
2020 年 09 月 20 日 11:38
回复
用户头像
编译器们准备好了吗
2020 年 09 月 20 日 09:13
回复
用户头像
到35岁都学不完了
2020 年 09 月 12 日 14:04
回复
用户头像
学不动了
2020 年 09 月 12 日 10:08
回复
没有更多评论了
发现更多内容

dnsmasq-域名访问及解析缓存

一周思进

ARTS-WEEK2

一周思进

ARTS 打卡计划

架构师训练营第一周作业

小树林

极客时间 - 架构师训练营 - week1 - 作业2

jjn0703

极客大学架构师训练营

架构师训练营第一周作业

芒夏

极客大学架构师训练营

食堂就餐卡系统架构设计

Karl

LeetCode 769. Max Chunks To Make Sorted

liu_liu

LeetCode

食堂就餐卡管理系统

孙志平

愚蠢写作术(3):如何把读者带入迷宫深处

史方远

读书笔记 学习方法 个人成长 写作

使用 Docker Desktop 中的 Kubernetes

FeiLong

Docker Kubernetes

架构师训练营第一周学习总结

刘志刚

图解Java垃圾回收算法及详细过程!

攀岩飞鱼

JVM Java、 虚拟机 垃圾回收机制

食堂就餐卡系统设计

飞雪

SpringBoot整合Quartz实现任务定时

北漂码农有话说

SpringBoot 2

ARTS打卡 week 2

猫吃小怪兽

ARTS 打卡计划

程序员陪娃系列——数学启蒙趣事

孙苏勇

程序员人生 陪伴

食堂就餐卡系统设计

刘志刚

HBase 常用 Shell 命令手册

Rayjun

Java HBase

软件建模与设计文档

大雄

UML

食堂就餐卡系统设计

大雄

架构师如何做架构总结

Karl

SpringBoot基本特性以及自动化配置-SPI机制

攀岩飞鱼

Java 微服务 Spring Boot Java、 SpringCloud

ARTS打卡Week 03

teoking

ios LeetCode

ARTS 打卡 WEEK3

编程之心

ARTS 打卡计划

架构方法学习总结

飞雪

第一周UML作业

吴建中

面试了 6 轮 Google中国 之后,还是挂了

石头

面试 谷歌Google Java 面试 经验分享 面经

SpringBatch系列之并发并行能力

稻草鸟人

Spring Boot SpringBatch 批量

ARTS(2020-06-01/2020-06-07)

天行者

ARTS 打卡计划

程序员的晚餐 | 6 月 7 日 豆腐年糕

清远

美食

史上最诡异问题,iOS 单例初始化两次,你遇到过吗?

liu_liu

ios 初始化 单例 两次

Milvus Community Conf 2020

Milvus Community Conf 2020

C++20终于来了!-InfoQ