写点什么

C++20 终于来了!

  • 2020-09-11
  • 本文字数:1784 字

    阅读完需:约 6 分钟

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-09-11 19:0019497
用户头像
王强 技术是文明进步的力量

发布了 938 篇内容, 共 560.1 次阅读, 收获喜欢 1817 次。

关注

评论 6 条评论

发布
用户头像
放弃吧,C++,
2021-01-24 22:52
回复
用户头像
看样是应对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
回复
没有更多了
发现更多内容

本文帮你在Unix下玩转C语言

MySQL从删库到跑路

unix C语言

滴滴开源小桔棱镜:一款专注移动端操作行为的利器

滴滴技术

开源 滴滴 移动端

挖矿矿池系统开发详情丨挖矿矿池源码案例

系统开发咨询1357O98O718

挖矿矿池系统开发案例 旷工系统开发功能

架构师训练营第八周作业

李日盛

算法

用60行代码实现一个高性能的圣诞抽抽乐H5小游戏(含源码)

徐小夕

Java 大前端 H5游戏 H5

TensorFlow2 Fashion-MNIST图像分类(一)

书豪

tensorflow 学习

生产环境全链路压测建设历程之五 针对稳定性矛盾, 从目标、流程、组织体系发力

数列科技杨德华

CTO与COO联手接了公司的外包项目 | 法庭上的CTO(6)

赵新龙

CTO 法庭上的CTO

海量数据架构下如何保证Mycat的高可用?

冰河

分布式事务 分布式数据库 分布式存储 mycat 数据库集群

TensorFlow2 Fashion-MNIST图像分类(二)

书豪

cartographer环境建立以及建图测试(详细级)

良知犹存

cartographer slam

四币连发平台系统开发详解丨四币连发源码(案例)

系统开发咨询1357O98O718

四币连发系统开发案例详解

揭开IP地址的神秘身份!!!

德胜网络-阳

20分钟带你掌握JavaScript Promise和 Async/Await

葡萄城技术团队

Java

架构师训练营第三周作业

Geek_xq

修一座安全的广厦,庇护赛博世界的流浪者

脑极体

架构词典:工程

lidaobing

架构 工程能力

Redis Sentinel-深入浅出原理和实战

Linux服务器开发

redis 中间件 底层应用开发 web服务器 Linux服务器开发

docker与podman的故事:一个方兴未艾,一个异军突起

晓川

大促中为什么需要可视化监控大屏?

京东科技开发者

大数据 监控 数据可视化

架构师训练营W08作业

Geek_f06ede

甲方日常 66

句子

工作 随笔杂谈 日常

刚入职,就被各种 Code Review,真的有必要吗?

xcbeyond

方法论 研发管理 编程习惯

LeetCode题解:515. 在每个树行中找最大值,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

DeFi流动性挖矿系统开发详解方案

系统开发咨询1357O98O718

defi流动性挖矿系统开发

DeFi流动性挖矿系统开发(案例源码开发)

系统开发咨询1357O98O718

defi流动性挖矿系统开发

合伙开公司、借款变工资 | 法庭上的CTO(7)

赵新龙

CTO 法庭上的CTO

天下武功,唯”拆“不破| 技术人应知的创新思维模型 (4)

Alan

思维模型 技术人应知的创新思维模型 MECE 组合创新 28天写作

架构师训练营第 1 期第12周作业

业哥

DeFi借贷质押系统APP开发|DeFi借贷质押软件开发

系统开发

SDK开发质量保障经验总结

张明云

接口 程序设计 接口测试 sdk SDK测试

C++20终于来了!_语言 & 开发_万佳_InfoQ精选文章