C++:在“替代”中迎来“转机”的 2022 年!

【CSDN 编者按】告别各种不确定的 2022,我们迎来了崭新的 2023 年,岁末年初,大家都有写总结的习惯,回顾与展望。作为知名的
C++ 开发人员,Bartlomiej Filipek 在自己的博客上对 C++ 2022 进行了非常全面的总结。CSDN
组织译者进行了编译。

原文链接:https://www.cppstories.com/2022/cpp-status-2022/

未经授权,禁止转载!

作者 |Bartlomiej Filipek
译者 | 昕慈
责编 |梦依丹 出品 | CSDN(ID:CSDNnews)

每三年更新一次新功能、新标准的 C++ 在过去几年的表现着实有点“稳定”和“无聊”,甚至微软 Azure CTO 直接呼吁大家停用 C++。但 2022 年可以说是 C++ 的一个历史转折。

下面一起来看看 2022 年发生的一些事情。

背景

2022 年,通过诸如 ISO 委员会会议等现场会议可以观察到,编译器供应商似乎正忙着完成对 C++ 20 以及一些 C++ 23 元素的支持,ISO 委员会致力于完成 C++ 23 最后的部分以及 C++ 26 的一些特性。

在 2022 年年中左右,一些不确定性因素出现——某些具有影响力的组织宣布了新的编程语言:Val(由 David Abrahams 领导)、Carbon(由谷歌支持)、CppFront(由 Herb Sutter 领导)。

同时,作为开发者的我们在社区中看到了各种改进和反馈循环。例如,Vittorio Romeo 解决了 std::move, std::forward 以及其他一些小程序长期存在的调试性能问题。惊喜的是,供应商很快就实现了这些建议。

总的来说,我认为 2022 年的主要趋势如下:

  • C++23 特性冻结

  • C++20 被采用

  • 新语言

  • 反馈循环以及更好的工具

此外,这一年还发布了 ChatGPT ,虽然 ChatGPT 与 C++ 没有直接的联系,但它可以极大地影响我们编写程序、学习甚至教学的方式。简而言之,ChatGPT 证明了它可以成为各种任务的便捷助手。

从时间轴看 C++

为了更好地了解背景,让我们来看看 2022 年发生的主要事件。

在这里插入图片描述

C++ 17 的编译器支持

几乎所有主流编译器都支持 C++ 17,只有少数例外,比如缺少 from_chars, to_chars 的浮点指针支持,或者并行算法的问题。

如果你想学习 C++ 17 的所有特性,可以参考:https://www.phoronix.com/news/GCC-11-Cpp-17-Default

C++ 20 的编译器支持

截至 2022 年年底,只有 MSVC(VS 2022 17.0)完全支持该标准。即将发布的 GCC 13.0 拥有最多的特性,而 Clang(16.0)则稍微落后。缺少或存在问题的主要特性是模块、std::format, std::chrono 附加和协程,不过这些问题正在被慢慢解决。

以下是标准中添加的一些比较好的功能:

  • 模块

  • 协同程序

  • 概念以及标准库中的概念

  • 范围

  • 操作符<=> 及其在标准库中的使用,简化了运算符重写规则

  • 文字格式-std::format

  • 日历和时区

  • jthread, 信号量、更多原子、障碍和更多并发性的东西

  • consteval 和constinit

  • constexpr 算法,向量,字符串,内存分配

  • std::span

  • ……

下面是编译器对语言特性的注释:
在这里插入图片描述
关于库的特性:
在这里插入图片描述

C++ 23 的编译器支持

2022 年的新标准是值得关注的,委员会在 2022 年 6 月的 ISO 会议之后宣布它进入了“功能冻结”阶段。

下表是一些语言特性及其在编译器中的当前支持:
在这里插入图片描述
而最令人兴奋的事情之一是标准中添加了 P2718R0,这是对 P2012“Fix the range‐based for loop”的改进。

简而言之,你可以这样写:


std::vector<std::string> createStrings();
for (char c : createStrings().at(0)) // <<!
{// some code...
}

自 C++ 20 开始,上面的 for 循环语句就存在 Bug,因为我们访问的临时对象的生命周期已经结束。而在 C++ 23 中,循环表达式中所有临时对象的生命周期都将被延长,而不仅仅是第一个。

下表是关于库的一些改进:
在这里插入图片描述
在这里插入图片描述

ISO C++ 会议

2022 年召开了三次 ISO 会议,包括两次虚拟会议和一次全体投票会议,分别在 2 月和 6 月举行。

会议提出,计划完成 C++ 23 的草案,并修正了一些报告的问题,将于 2023 年春天发送到出版机构。我们可以期待 C++ 23 在 2023 年秋季左右正式发布。

三个主要编译器

想要达成 C++ 标准,编译器供应商和库团队将有很多工作要完成。下面一起来了解三个主要的编译器:MSVC、GCC 和 Clang。

Visual Studio

MSVC 团队已经重写了编译器基础结构,可以相对快速地推出新功能,该团队甚至两次宣布支持 C++ 20。

此公告主要针对, 以及 的一些额外更改和 DR 标准进行修复。如果能够完成,implementation 将再次稳定运行。

GCC

当前稳定版本 GCC 12.2 是 2022 年 8 月发行的 GCC 12 系列,即将发布的 GCC 13 预览版可参考:https://gcc.gnu.org/gcc-13/changes.html

性能调试

让我们扩展一下性能和反馈循环相关内容,可以参考 Vitorio Romeo 的这篇文章:https://devblogs.microsoft.com/cppblog/improving-the-state-of-debug-performance-in-c/

简而言之,多亏了 msvc::intrinsic 属性,团队成功地注释了一些移动类函数,在某些情况下,17.4 中生成的代码产生了 226 条指令,而 17.5 只给出了 106 条。

相关的发布说明了,如今 std::movestd::forward std::move_if_noexcept, 以及 std::forward_like 将不会在生成的代码中产生函数调用,即使在调试模式下也是如此,这是为了避免在调试版本中造成不必要的开销。因此/permissive-或者其他可以暗示它的标志(例如/std:C++20或std:C++latest)是很有必要的。

此外,Vittorio 还报告了两个错误:分别在 libstdC++ 和 libC++ 中使用std::move 导致调试性能恶化。这两个问题似乎在 GCC 和 Clang 中得到了修复,如今它们已经可以折叠简单的指令。

总而言之,在 C++ 的调试方面仍然有很多工作要做,不过正如我们所看到的,目前社区运行良好,在倾听了用户的需求之后,供应商也进行了相应的改进。

C++ 的继承语言及其安全性

ISO C++ 的发展过程很慢,效率过低,甚至在委员会中也有很多“神圣”的争论,特别是关于“不破坏 ABI”之类的问题。

在某些情况下,我们能看出标准中存在的一些问题,也知道如何修复它们,但因为无法破坏 ABI,所以除了添加一些俗套的变通方法以外什么也做不了。一些诸如来自谷歌的团队对此感到气馁,转而创建了一些新的 C++ 方案。

推荐你阅读 Lucian Radu Teodorescu 所著的《The Year of C++ Successor Languages》。从这篇文章中可以了解到,尽管大众对于 C++ 的批判很多,但它依然在过去的 30 年间始终稳居编程语言的前 4 名。批判者认为,该语言太大、太复杂,有些功能应该被删除,也存在很多达不到的功能。

恰好是这些批判促使了一些新的编程语言诞生——它们想要替代 C++ 成为系统主导编程语言。2022 年,C++ 主体会议发布了三种语言,分别是 Val、Carbon 和 CppFront,文章中分别介绍了这些语言,以及对其作为 C++ 后继者的潜力进行了批判性的阐述。

  • Val:由 Dave Abrahams 和 Dimitri Racordon 发起,深受 Swift 的影响,看似条理清晰,易于使用(参见https://www.val-lang.dev/)

  • Carbon:由谷歌支持(Chandler 的说法是 Adobe 也支持),“感觉它就像是一个 C++ 清理项目。”

  • CppFront/Cpp2:由 Herb Sutter 领导,它想要更好的语法和默认值,但仍然编译为C++。

综上所述,有竞争总是好的,C++ 可能受益于其他语言,并且和 Carbon 或 Rust 交换特性。更重要的是,在 2022 年 C++的“安全性”发展似乎更为明显,可参考以下报告。

关于 ChatGPT

YouTube 中有一条名为“AI 和 ChatGPT 可以取代 C++ 程序员吗”的 C++Weekly 视频,视频中 Jason Turner 用机器人做实验,有时候它可以创建有效的响应,但仍须注意一些细节,得出结论是这个聊天机器人可以成为一个非常有用的编码助手!

一封来自 Educative 创始人 Fahim ul Haq 的邮件这样写到:

像 ChatGPT 这样的人工智能将改变软件开发的格局,但并非以许多人所关心的方式。作为一名软件工程师和开发人员学习的倡导者,我相信 ChatGPT 可以帮助我们制作更好的软件,但它不能取代开发人员的工作。

关于聊天机器人,Fahim 还提出了这样的想法:

“ChatGPT 将使编码更加高效和无误。由于它可以适应更复杂的需求,我们可以期待它帮助消除繁重的工作,加快生产力和测试。”

随着诸如 ChatGPT 这样智能助手的发展,许多占用开发人员的乏味任务在未来十年可能会消失,包括自动化单元测试、基于参数生成测试用例、分析代码以建议安全最佳实践,以及自动化 QA。

这就更不用说学习和教学能力了,我们可以想象一位友好的“C++ 导师机器人”,你可以向它学习编程语言,或者像在工作中请教专家同事一样向它询问任何语言特性。也许我们将在 2023 年看到更多鼓舞人心的工具,有些可能是专门为 C++ 而设计的。

年度书籍

以下是 2022 年或 2021 年年底出版的一些精选书籍:
在这里插入图片描述

C++ 受欢迎程度

2022 年,C++ 在各种编程语言的“流行度”排行榜上似乎有了稳定的增长。在 TIOBE 最新公布的年度编程语言中,C++ 以年增幅 4.62% 的人气摘得桂冠,成为 2022 年度编程语言。

下面是 Stack Overflow 调查和 TIOBE 索引数据:

在这里插入图片描述
在 2022 年 11 月初,还有这样一篇有趣的文章,名为《有才华的 C++ 开发人员正在枯竭》,以下是摘自文章的片段:

安东尼·皮科克(Anthony Peacock)曾在 Citi 和 Citadel 担任量化分析师,他说:“不可能找到拥有真正高水平 C++ 技能的人,但这正是每个交易公司都想要的。”

即使 Carbon、Rust 或 CppFront 正处于拐点处,但仍然有大量的 C++ 代码需要维护。更重要的是,像金融这样的许多领域仍然使用 C++ 作为他们的底层基础语言。

关于 C++ 的一些调研

作者在 2022 年 12 月 12 日展开了关于 C++ 使用情况的年度调研,收到了 649 份反馈。下面是关于调研结果的总结(以下数字总和不等于 100%)。

C++ 标准使用:在日常生活中,你使用哪种 C++ 标准?

在这里插入图片描述
在这里插入图片描述
结果显示,C++ 17 使用最多,C++ 20 增幅最多,从 2011 年的 28.8% 增长至 2022年的 42.2%,而 C++ 11/14 稳定在 28% 左右。

关于 C++ 17:对 C++ 17 使用程度如何?
在这里插入图片描述
关于 C++ 20:你对 C++ 20 有什么经验?
在这里插入图片描述
编译器使用方面:GCC 仍然是大多数人的选择。
在这里插入图片描述
IDE 方面:
在这里插入图片描述
你还使用了哪些额外的工具?
在这里插入图片描述
2022 年发生的与 C++ 有关的美好事情有哪些?这是一个开放性问题,基于留言的受欢迎程度,我们摘取了部分内容:

C++ 语言的更新和标准:语言的更新,比如 C++ 20 和 C++ 23 的发布,以及采用了新的特性和建议。

新的语言:Carbon/Cpp2/Val,并在社区中引发了关于下一步的讨论。

会议和活动:像往常一样,CppCon 和 Meeting C++ 这样的会议得到了很多投票。

书籍和资源:“C++ 之旅”、“安全地拥抱现代 C++”和“Klaus Iglberger 关于软件设计的书”在答案中非常受欢迎。

YouTube 频道:尤其是 Jason 's Turner、Cppcon Channel YouTube、Meeting C++ YouTube

个人项目和学习:用于个人项目或学习更多关于 C++ 的知识,以提高技能和对语言的理解。

编译器支持:新 C++ 标准的编译器支持是 C++ 社区的基本发展方向。

C++ 的受欢迎程度:回答中提到了 TIOBE 和其他排名。

此外,还有一些好消息分享:

“我们公司迁移到了 C++ 20”

“我从 C++14 到 C++20 完成了个人进阶”

“我刚刚又找到了一份 C++ 的工作,我很喜欢它”

总结

目前 C++ 正处于一个十字路口:一方面,它发展现状良好,有很多新特性、编译器支持以及很酷的工具(甚至更好的调试性能);另一方面,许多专家正努力使这门语言从本质上更加安全,并解决一些长期存在的问题(打破了 ABI 的讨论)。这就是为什么有些专家试图从一些新鲜的东西开始,通过创建一个新的赛道来改进 C++。这些新语言直接被编译为 C++(如 CppFront),或者与 C++ 具有健壮的互操作性(如 Carbon)。

也许在未来,我们将使用更加安全的 C++ 2 语言进行编写,并且在相同的项目中仍然保留一些优秀的 C++ 遗留文件。希望良好的竞争可以把 C++ 推向新的历史舞台,并为我们提供更好的功能和更安全的代码。

最后,你对 2022 年的 C++ 有什么看法?对你来说最重要的事件/消息是什么?欢迎留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38962.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python如何避免代码重复

Python如何避免代码重复 作为一名有10年Python编程经验的工程师&#xff0c;我深知代码重复会降低程序的可维护性&#xff0c;使代码变得混乱和难以扩展。因此&#xff0c;我想在这篇文章中介绍一些技术和最佳实践来避免Python代码重复。 为什么要避免重复代码&#xff1f; …

统计文本文件中的英文单词数量

python 3.5实现 思路&#xff1a; 读取txt文本内容&#xff0c;一行一行读取&#xff0c;去掉换行符&#xff0c;讲文本内容用空格分开&#xff0c;即以单词为单位将文本分开&#xff0c;将单词存到list列表中&#xff0c;使用dict.fromkeys(list,0)方法将列表转换成字典&…

用Python统计中英文词频

本设计基于Python3.6实现中英文词频统计功能 英文词频统计 统计哈姆雷特英文版&#xff0c;txt格式文件地址&#xff1a; hamlet.txt 思路分析&#xff1a; 获取文件中词汇转换为统一格式&#xff0c;如小写或者大写切割词汇循环遍历进行统计打印输出 代码如下&#xff1…

WordCount词频统计

WordCount词频统计 from educoder实训 实训项目地址&#xff1a;https://www.educoder.net/shixuns/aekgf6pz/challenges 本关任务 词频统计是最能体现MapReduce思想的程序&#xff0c;结构简单&#xff0c;上手容易。 词频统计的大致功能是&#xff1a;统计单个或者多个文…

WordCount单词统计笔记

1.在本机的/root目录下&#xff0c;依次创建文件夹data,文本文件word.txt. mkdir -p /root/data vim /root/data/word.txt键入i,进入编辑模式&#xff0c;输入如下内容&#xff1a; hello world hadoop hdfs qingjiao hadoop hongya hdfs qingjiao qingjiao hadoop hongya键入…

用python统计你的文章里每个英文单词的数量

p i heared a story about you #你的文章段 linesp.strip().split(\n) words_cnt{} for line in lines:lineline.replace(,,).lower() #逗号都用英文状态的wordsline.split( ) #括号里面的单引号里有空格for word in words:words_cnt[word]words_cnt.get(word,0)1 words_lstl…

Python实现统计文本当中单词的数量,

这是阿里巴巴2016年的一道面试题&#xff1a; 统计英文文章中单词出现的次数&#xff0c;并且输出出现次数的前10个单词 文本如下&#xff1a; Accessing Text from the Web and from Disk Electronic Books A small sample of texts from Project Gutenberg appears in the …

wordcount单词词频统计

单词出现的总次数 1、WordCount概述 WordCount算是大数据计算领域经典的入门案例&#xff0c;相当于Hello World。 虽然WordCount业务极其简单&#xff0c;但是希望能够通过案例感受背后MapReduce的执行流程和默认的行为机制&#xff0c;这 才是关键。 2、WordCount编程实现…

Python实现统计文本中各单词数量

Python实现统计文本中各单词数量 代码运行结果 代码 import strings not talk,not helo show me your code hello helo for i in s:变例s中的字符&#xff0c;如果属于标点符号则替换成空格if i in string.punctuation:s s.replace(i, ) # print(s) lst s.split() # s被空…

华为机试—统计单词个数(map)

输入n个单词&#xff0c;统计各个单词出现的个数 #include <iostream> #include <map> #include <string> using namespace std;int main() {map<string,int> k;string word;while(cin>>word)k[word];for(map<string,int>::iterator ik.be…

[云炬python3玩转机器学习] 5-7,8 多元线性回归正规解及其实现

08 实现我们自己的 Linear Regression import numpy as np import matplotlib.pyplot as plt from sklearn import datasets import datetime;print("Run by CYJ,",datetime.datetime.now()) Run by CYJ, 2022-01-20 20:06:04.130127 boston datasets.load_boston()…

手机号验证码登录的思路

引言 当前很多web端的应用登录方式主要分为以下几种&#xff1a; 账号密码登录手机号验证码登录扫码登录 这里我主要说一下我对于手机号验证码登录的思路&#xff0c;如果有遗漏或者差错的地方&#xff0c;请指正&#xff1b; 整体流程 大致流程如下&#xff1a; 大致就是…

手机验证码登录,账号登录结合

本项目基于腾讯外包框架&#xff08;wei框架&#xff09; 地址&#xff1a;https://github.com/twinh/wei/tree/master/docs/zh-CN#wei HTML页面&#xff1a; 【基于bootstrap前端框架】 头部&#xff1a;<ul id"js-reset-tabs" class"nav tab-underline…

手机号验证登录用例

手机号验证登录 1.手机号验证登录是我们现在比较常见的登录方式&#xff0c;下面分享一下基本的用例的编写。能帮助您是我的荣幸&#xff0c;不喜勿喷&#xff0c;谢谢&#xff01;

手机号验证码登录

登录入口 1.app 正常登录入口 2.app 网页登录&#xff0c;比如分享直播卡片时&#xff0c;进入直播间需要先进行登录 3.pc 登录 一&#xff0c;app常见的登录方式 1.手机号验证码登录 2.用户名密码登录 3.一键登录 二&#xff0c;手机验证码登录示意图 三&#xff0c;流…

chatgpt赋能python:Python代码的快捷键:让编程速度更加快速高效

Python代码的快捷键&#xff1a;让编程速度更加快速高效 Python是一种面向对象、直译式计算机程序设计语言&#xff0c;备受程序员喜爱。虽然Python本身已经趋于简洁易读&#xff0c;但使用Python代码编辑器的快捷键可以进一步提高编程效率&#xff0c;帮助合理利用时间。 为…

chatgpt赋能python:Python实现滚动小球

Python实现滚动小球 Python是一种高级编程语言&#xff0c;可以用于开发各种类型的应用程序。在此我们将介绍如何使用Python编写代码实现滚动小球。这个小球会在屏幕上滚动&#xff0c;给用户一个视觉效果。 实现滚动小球的Python代码 import pygameBLACK (0, 0, 0) WHITE …

流浪地球2的科学幻想与现实中的未来计算机科技

作为一个科幻迷、《三体》迷&#xff0c;从小时候第一次看《珊瑚岛上的死光》开始&#xff0c;一直期待一部国产科幻电影。等待了40余年&#xff0c;有生之年终于如愿以偿。 周末二刷了《流浪地球2》。丁老师认为这部科幻电影已经超越了1&#xff0c;以及原著&#xff0c;成为…

还在为投稿发愁吗?ICCVIT 2023,一个计算机、视觉与智能技术国际会议

◆ChatGPT热潮带来的行业革新大行其道&#xff0c;相关区块链、信息安全、视觉、机器学习....产业必将带来诸多变革。 本文为大家梳理了近期可投的4则EI检索的国际会议&#xff0c;均可推荐发表SCI&#xff0c;还有超多IEEE Fellow主讲&#xff0c;不仅涵盖计算机各个学科方向&…

不刷卡,不扫码,微信推出刷掌支付;Meta将再裁员6000人;AI“黑箱”被打开?谷歌找到大模型能力涌现机制|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…