趣文网 > 作文大全

C++ 过去的这一年

2020-11-29 12:30:01
相关推荐

本文旨在让我们回顾 C++ 2019年里的变化和发展!我们将重点关注本年度里 C++ 上发生的重大事件,标准的发展,工具的变化等等……

作者 | Bartek

译者 | 苏本如,责编 | 屠敏

以下为译文:

免责声明:本文提出的观点仅代表个人立场,并不代表整个ISO C++标准委员会的意见。

简介

以下是本年度最让我关注的三大方面:

C++ 20即将发布。开发工具。C++在开发者中的稳定位置。请继续阅读以获得对以上三大方面的全面了解。

重大事件时间表

下表按日期顺序列出了本年度C++发生的重大事件:

对C++11/14的编译器支持

为了保持完整性,笔者在这里先提醒一下:Clang(从版本3.4开始),GCC(从版本5开始)和Intel C++ Compiler(从版本15开始)已经完全支持C++ 11/14。

Visual Studio团队宣布Visual Studio 2017 15.7版完全支持C++ 17,这也意味着它对C++ 11/14的支持。现在,你可以构建复杂的代码库,如boost::hana或range v3。

既然C++ 11/14在所有主流编译器中都得到了支持,那么就不存在任何理由不使用现代C++了。

对C++ 17的编译器支持

C++17作为ISO/IEC 14882标准:2017 编程语言–C++发布于2019年12月。

你可以在这里下载一个免费的官方文档的最终版:N4700, 2017-10-16, PDF。

支持C++的编译器的一份完整列表可以参考这里:C++17 编译器支持。

你也可以阅读我的博客文章:C++17特性(https://www.bfilipek.com/2017/01/cpp17features.html)。

关于C++17的语言特性:

从Clang版本5.0、 GCC版本8.0、 Visual Studio版本15.7和Intel C++ Compiler版本19.0.1开始,所有编译器都支持C++17的语言特性。

标准库上还有更多的工作需要完成,特别是针对并行算法和文件系统等重要问题的工作。

对于std :: filesystem的支持,你需要GCC版本8.1(或者支持更好的版本9.1)、Clang版本3.9(或者支持更好的版本7.0)和Visual Studio 2017版本15.7。

并行算法的更新最早在Visual Studio 2017 15.7中提供,但是随着之后的更新,MSVC团队又添加了更多算法。

接下来可以使用的是Intel PSTL实现,它也被添加到GCC版本9.1中。你需要Intel线程构建块(TBB - Threading Building Block) 作为后端实现(欲知详情,请参考下面这篇文章):

在Linux和macOS上使用GCC 9.1和Intel TBB实现C++ 17 STL并行算法(作者:Paul Silisteanu) :https://solarianprogrammer.com/2019/05/09/cpp-17-stl-parallel-algorithms-gcc-intel-tbb-linux-macos/

而Clang库对并行算法的支持还需要继续等待。

另一个问题是低层转换函数的实现。

Visual Studio从版本15.7开始支持在from_chars() / to_chars()函数中支持整形参数,在版本15.8中又添加了对from_chars()的浮点支持。但是完全一致的支持直到版本16.4(对to_chars()的浮点支持)才开始可用。

到目前为止Clang和GCC版本只支持整数。原因可能是MSVC STL(标准模板库)的实现是开源的,我们可以预期一些代码将被移植到其他标准库实现中。

C++20

关于C++20的讨论今年占据了主导地位。在德国科隆举行的夏季ISO C++标准会议后,C++20的特性已经冻结。在稍晚时间举行的贝尔法斯特C++标准会议上,第一批国家机构的一些意见得到了解决。

总之,这意味着我们明年发布新的C++标准的道路会一马平川!

下面列出C++20的主要特性:

模块(Modules)协程(Coroutines)标准库开箱即用的概念(Concepts)范围(Ranges)constexpr支持:new/ delete,dynamic_cast,try/catch,虚拟constexpr 向量和字符串计时(Chrono):日历、时区支持std::format – 详见此处C++20中的std::formatstd::spanstd::jthread更重要的是,很多C++ 20的特性在流行的编译器中已经实现了。像模块(Modules)支持这种最重要的工作仍然没有完成(我们只是完成了一些实验性的Module-TS实现)。

像以往一样,完整的编译器支持列表可以在cppreference网站:C++20编译器支持页面(https://en.cppreference.com/w/cpp/compiler_support#cpp2a)上找到。但是我想在这里列举几个:

ISO C++标准会议

今年共计举行了三次C++标准委员会会议,分别在夏威夷的科纳、德国的科隆和北爱尔兰的贝尔法斯特举行。似乎今年的委员会更愿意留在欧洲。

这里可以找到所有的会议计划,包括:即将举行的会议和已经结束的会议(https://isocpp.org/std/meetings-and-participation/upcoming-meetings)。

下一次会议将于2020年2月在布拉格举行。

二月: 夏威夷科纳会议

在这次会议上,下列C++新特性投票后被批准纳入了C++20标准:

模块 - P1103!协程 - N4736!将结构化绑定扩展为更像变量申明 - P1091R3std::polymorphic_allocator<> - P0339std::midpoint和std::lerp - P0811std::execution::unseq执行策略 - P1001std::ssize 返回有符号数的自由函数 - P1227查找时预先计算hash值 - P0920并行化TS 第二版也被作为以下标准发布:

ISO/IEC TS 19570:2018编程语言 - 用于并行化的C++扩展技术规范(https://www.iso.org/standard/70588.html)。

这次会议的主要会议报告摘要可以从如下两个链接找到:

r/cpp: 2019-02 科纳ISO C++标准委员会会议报告(https://www.reddit.com/r/cpp/comments/au0c4x/201902_kona_iso_c_committee_trip_report_c20/)和科纳会议后的邮件列表(https://isocpp.org/blog/2019/03/2019-03-post-kona-mailing-available)。

其他版本的会议报告链接如下:

Herb Sutter – 会议报告:冬季ISO C++ 标准会议(科纳)Botond Ballo - 会议报告: 2019年2月科纳C++标准会议cor3ntin – 科纳会议报告Timur Dumler – 会议报告:2019年2月夏威夷科纳ISO C++标准委员会会议七月: 德国科隆会议

这次会议是C++20标准的特性冻结会议。这是最后一次投票的机会。

另外,有一个主要的特性在这次会议上从草案中淘汰了。虽然Contracts(合约)很有吸引力,但实际上,委员会未能就最后的实施要点达成一致。因此,最后的决定是最好成立一个独立的研究小组,尝试在C++ 23中纳入这一特性。

这次会议批准的一些重要特性和变化如下:

合约(Contracts)从C++20中移除,Contracts研究小组成立。文本格式化支持:std::format("For C++{}", 20) - P0645C++20同步库 - P1135constexpr 内存分配 - P0784constexpr std::vector - P1004constexpr std::string - P0980线程可中断 join 支持(Stop Token) - P0660source_location - P1208using enum - P1099constinit关键字 - P1143数学常量 (std::numbers::pi和 friends) - P0631将概念(Concepts)的命名方式从PascalCase(驼峰式命名法)改为snake_case(蛇形命名法) - P1754废弃volatile关键字 - P1152布局兼容性和指针互易性特征 - P0466构造函数的nodiscard 属性 - P1771改进的iterator concept hierarchy - P1207Move-only视图 - P1456附加视图和range适配器 - P1035运算符<=>加入标准库 - P1614类模板参数推导的扩展 - P1021这次会议的主要议程报告摘要可以在下面两个地方找到:

r/cpp thread - cologne meeting(https://www.reddit.com/r/cpp/comments/cfk9de/201907_cologne_iso_c_committee_trip_report_the/)post Cologne mailing(https://isocpp.org/blog/2019/08/2019-08-post-cologne-mailing-available)会议报告:

Herb Sutter – 会议报告:夏季ISO C++ 标准会议(科隆)Timur Dumler – 会议报告: 2019年7月德国科隆C++委员会会议, Botond Ballo – 会议报告: 2019年7月德国科隆C++ 标准会议Silexica – 会议报告: 2019年度德国科隆ISO C++会议Guy Davidson – 德国之行:科隆会议报告十一月,北爱尔兰贝尔法斯特会议:

这一次,委员会不再投票任何新的特性,他们的大部分时间花在解决国家机构针对C++ 20草案提出的意见。

主要的会议报告发布在r/cpp网站上,会后的邮件列表地址为: https://isocpp.org/blog/2019/12/2019-11-post-belfast-mailing-available

其他的会议报告有:

Herb Sutter - 会议报告:秋季ISO C++ 标准会议(贝尔法斯特)Botond Ballo - 会议报告:2019年11月贝尔法斯特C++标准会议Ben Craig 会议报告:贝尔法斯特的独立错误Guy Davidson - 在我家后院召开的WG21会议: 贝尔法斯特会议报告

编译器最新版本及说明

下面列出编译器的最新版本和最引入注目的更新。

Visual Studio

最新版本是Visual Studio 2019版本16.4,最后一次更新发生在12月3日。

– 版本说明:https://docs.microsoft.com/en-us/visualstudio/releases/2019/release-notes

今年推出了新版Visual Studio 2019!它为已经非常出色的集成开发环境(IDE)带来了许多新的特性和增强功能。

这里是最初发布时的博客文章:

Visual Studio 2019: Code faster. Work smarter. Create the future. | Visual Studio Blog(https://devblogs.microsoft.com/visualstudio/visual-studio-2019-code-faster-work-smarter-create-the-future/)。

一些重要的特性:

基于Visual Studio IntelliCode的人工智能辅助代码补全。在C++ MSBuild和CMake项目中对 Clang 和 MSVC 的 Clang-Tidy 的支持。AddressSanitizer支持 Windows 上使用 MSVC 编译的项目和CMake更好的集成。概念(Concepts)在版本16.3 中可用对to_chars()的全面支持, 完善了C++17中的要求。提供了一个名为C++ Build Insights的新工具集。欲知详情,请参阅C++团队博客。另一个主要的更新来自Cppcon大会,MSVC团队在会上宣布将他们的标准模板库实现开源!详情请参见:

MSVC宣布开源其标准模板库实现 | C++ 团队博客(https://devblogs.microsoft.com/cppblog/open-sourcing-msvcs-stl/)

一些其他新闻:

AddressSanitizer (ASan)在 Windows上支持MSVC | C++ 团队博客在Visual Studio中使用clang-tidy进行代码分析 | C++ 团队博客Visual Studio 2019版本16.3开始支持C+20 Concepts特性 | C++团队博客这里有一个关于C++标准(包括C++20)的一致性的文档:

Microsoft C++语言一致性清单(https://docs.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance?view=vs-2019)。

GCC

最新的稳定版本9.2,发布于8月12日,详情请参见:GCC9发布系列更新(https://www.gnu.org/software/gcc/gcc-9/)。

GCC对当前C++特性的支持(https://gcc.gnu.org/projects/cxx-status.html)Libstdc++ 状态(https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html)Clang

最新的稳定版本9.0,发布于2019年9月19日。详情请参见:版本发布说明

Clang对当前C++特性的支持(https://gcc.gnu.org/projects/cxx-status.html)libc++ C++1z 状态(https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html)Intel Compiler

最新版本19.1,发布于2019年4月2日。详情请参见:版本发布说明(https://software.intel.com/en-us/articles/intel-cpp-compiler-release-notes)

Intel C++ Compiler对C++14特性的支持(https://software.intel.com/en-us/articles/c14-features-supported-by-intel-c-compiler)Intel C++ Compiler对C++17特性的支持(https://software.intel.com/en-us/articles/c17-features-supported-by-intel-c-compiler)C++ Builder

最新版本为Rio 10.3 更新3,于2019年11月21日发布,详见版本发布说明。

集成开发环境(IDE)- Embarcadero C++ Builder使用了一个经过修改的Clang编译器(版本5.5)和一个Dinkumware标准模板库(STL)实现,它可以与Win32和Win64应用程序一起工作。这是一个功能全面的IDE,用于从单一C++代码库构建iOS、安卓、Windows和macOS应用程序。

一些相关新闻:

版本10.3.2新增功能:用于64位Windows环境的C++17 -- 实现在所有Windows环境下使用C++17 Clang编译器。新的Delphi和C++Builder RAD服务器课程,已在Embarcadero学院、 Embarcadero博客站点、开发者工具和IDERA社区提供RAD Studio 10.3新增功能: C++17的异步代码补全,以及其他功能这里是一份C++特性的一致性清单:编译器对现代C++语言特性的支持(http://docwiki.embarcadero.com/RADStudio/Rio/en/Modern_C%2B%2B_Language_Features_Compliance_Status)

各种工具

当编译器帮助C++代码完成了主要任务时,我们也不能忘记其他工具的重要性。

以下是一些重要的工具,值得了解一下:

Clang 工具:

Clang/LLVM 提供了许多强大的实用程序,例如:

Clang TidyClang-Include-FixerAddressSanitizerMemorySanitizer对于Visual Studio,你可以使用Clang Power Tools,它是Visual Studio的一个扩展.它由Victor Ciura开发 (@ciura_victor)。最新版本 5.5于2019年12月18日发布. 详见版本变更日志。它同时还有一个付费版本。集成开发环境

Visual Assist – 最新版本发布于2019年11月11日。详见:

Tomato Soup博客文章 | Visual Assist 版本2353已经可用(https://blog.wholetomato.com/2019/11/11/visual-assist-build-2353-is-available/)。ReSharper C++ - 最新版本为2019.3, 详见:

ReSharper C++博客文章 | ReSharper C++ 版本2019.3: 支持C++20概念,类型提示, #includes排序, 和其他特性(https://blog.jetbrains.com/rscpp/resharper-cpp-2019-3/)。CLion - 最新版本为2019.3, 详见:

CLion博客文章 | CLion 2019.3:一个专注于性能和一些期待已久的增强功能的高质量发布(https://blog.jetbrains.com/clion/2019/11/clion-2019-3-release/)。Cevelop版本1.13.0 发布(https://www.cevelop.com/2019/10/23/cevelop-1.13.0-release.html)。

为了更好地理解代码,你还可以使用SourceTrail。它最近作为完全免费版本发布!详见:

SourceTrail开发者博客 | SourceTrail现在已是免费的开源软件。

代码分析器:

CppDepend 版本2019.3:

CppDepend – 2019.3版本的新功能(https://www.cppdepend.com/cppdependv2019)!今年,该团队增加了对如下工作的支持:MISRA编码准则、VS 2019、QT项目、UI简化和嵌入式项目。PVS-Studio:这是一个使用C、C++和C#编写的,用于在程序源代码中进行错误检测的工具。在Windows和Linux环境下都能够工作。

最新版本是PVS-Studio 版本7.05,请参阅今年的所有发布说明(https://www.viva64.com/en/m/0010/)。今年的一些显著改进包括:.NET Core 3和3.1项目分析、MISRA编码准则支持、40多项新检查、对Java和SonarQube插件的支持。包管理器:

Conan– 版本1.21已经可用。Microsoft/vcpkg: VC++打包工具– 一个适用于Windows、Linux和MacOS环境的开源C++库管理器。

C++相关会议

我们没有理由抱怨C++会议的缺乏。实际上今年有很多会议机会,尤其是在春季和秋季,下面是几个会议的例子:

CppCon – 2019年9月举行C++Now – 2019年5月举行Meeting C++ - 2019年11月举行ACCU – 春季会议在2019年4月举行,秋季会议在11月举行还有很多其他的会议,如:Code::Dive、C++意大利大会、C++ on Sea、C++ 意大利日、C++俄罗斯大会、核心C++ 2019大会、等等。

如果你没有参加过任何一个会议,你可以在YouTube上快速输入它的名字,就会从中找到大部分演讲的视频,这很令人惊讶。你也可以使用一些网络搜索引擎很容易地找到相关会议报告。

以防万一,这里是ISO C++ 网站上的全球注册会议的链接:C++全球会议和 FAQ(https://isocpp.org/wiki/faq/conferences-worldwide/)。

社区和用户组

用户组提供给你遇见其他C++程序员,分享你的经验和学习新事物的机会。我强烈建议你定期访问这些用户组,或者至少偶尔访问一次。

我很高兴,我所在的城市(Cracow)的用户组C++ Krakow用户组(https://www.meetup.com/C-User-Group-Cracow):今年将继续存在,如果你住在附近的话可以加入!

如果你在查看完这个全球用户组列表后确认你附近没有C++用户组。你还可以加入如下用户组:

C++ Slack频道: https://cpplang.now.sh/#include C++(https://www.includecpp.org/)C++ Poland

此外,今年我们还在波兰推出了C++博客:C++ Polska。我们有几个活跃的作者每个月都会在那里分享很棒的内容!

同时我们也启动开始了一个Slack频道,在那里你可以讨论任何C++和非C++的东西:加入这里:C++ Polska Slack(https://bit.ly/cpppolskaslack)

书籍和课程

今年的一些发行的书籍和发布的课程值得一看:

有一个惊喜是John Lakos的书!我等了好几年,终于有货了!

下面是一些流行的C++自出版书籍的打印版本:

受欢迎程度

C++在哪些领域受欢迎?它的份额都被JavaScript蚕食了吗?

显然不是,因为在某些领域C++已经成长或保持在一个稳定的位置。

让我们看看一些图表/统计数据:

TIOBE 编程语言排行榜中,C++排名第4。它的占比现在为6.196%,去年超过了7%,两年前大约5.5%。详情请参见Tiobe Index。在 StackOverflow 调查中,C++排名第9,超过了C,但是低于Java,C#,当然也低于Javascript,而它在上一年排名第10。详见:2019 Stack Overflow开发者调查(https://insights.stackoverflow.com/survey/2019#technology)在GitHub调查中,C++排名从去年的第5下降到今年的第6。详见:2019 Octoverse 统计报告(https://octoverse.github.com/#top-languages)我个人觉得,C++仍然很强大。也许它并不完美,也不容易学习,但是很多代码仍然是用这种语言构建的。Rust或其他系统语言不会很快取代它。它的工具越来越好,而这个语言正在致力于降低它的复杂性,所以初学者的体验希望是越来越好。

然而,C++只是工具的一种,我们很感激今天我们有很多工具可以使用。

我还找到了Daniel Lemire最近发表的一篇文章,十年前他对程序开发和编程语言做了一些预测。他对C++的增长感到惊讶。

让我们看看Daniel Lemire的评价:

我认为从2010开始,C++已经成为一种更好的语言。这并不容易,但已经超出了我的预期。

问卷调查

一个多星期前,我做了一个快速的问卷调查,希望得到一些关于C++使用的数据。我收到了574个回复!感谢大家!

C++ 标准的使用

在日常工作中,你使用哪个C++标准?

(注:以上百分比的总和不是100%)。

在这份调查中,我没有明确“使用”的准确含义,所以它既可以指生产环境的编码,也可以指业余项目的编码。比如,我看到C++20的使用率很高,但我相信它主要用于测试,还没有用于完整的生产环境,或者,也许我错了?

C++17的使用经验

你对C++ 17的使用有什么经验?

我们可以看到,今年C++17标准的采用率在稳步增长。

C++20的使用经验

你对C++20的使用有什么经验?

编译器的使用

你使用什么编译器?

(注:以上百分比的总和不是100%)。

你还用哪些其他的开发工具?

(注:以上百分比的总和不是100%)。

去年我没有问这个问题。

我认为这个问题中的“debuggers”不是个好选项,因为我们可以假设所有的开发人员在某个时候都会使用它。

当然还有一些“其他”的答案,包括:ccache、meson、make、Boost build、QMake、Autotools、cmake format、Emacs、Whole Tomato。

你认为2019年发生的最好的事情是什么?

这是一个开放性的问题,根据我收集到的回答,主要有以下几件大事(以下列表基于答案中出现的顺序,没有特殊的排序):

CppCon 2019大会C++20 新特性和标准化C++20中的模块(Modules)特性协程(Coroutines)概念(Concepts)范围(Ranges)std::formatCode::Dive 2019大会Meeting C++ 2019大会C++博客 - 帮助更容易学习和掌握最新的语言C++ 书籍和课程 – 提升水平,更多的选择机会C++ CastC++ 社区 – 大会,用户组越来越好用的工具:Clang build analyser, VS 2019, QTCreator, CLion有些人还列出了一些个人成就:例如,开始使用C++17,在大会上的第一次演讲。有人提到在项目中引入Conan,有人换了工作。还有人反馈说“终于退休了”。这些对所有人都有益处!

我也很高兴看到有人说“最好的是我的书”。谢谢:)

给个对这个问题的回答例子:

“最好的事情是了解了C++17的细节”, 当然,这个免费版本坚定了我在项目中使用它的想法。

其他问卷调查

C++标准委员会在今年的二月份也发出了一份问卷调查。他们设法获得了2000多份回复。

这份问卷调查表和结果可以在这里找到:第二次C++基金会年度开发者问卷调查:标准C++ (https://www.jetbrains.com/lp/devecosystem-2019/cpp/)

调查结果.

还有一项来自Jetbrains的调查:C++ 2019 - 2019信息图表中开发者生态系统状态调查(https://www.jetbrains.com/lp/devecosystem-2019/cpp/)

总结

本年度我想强调的就以下三件事情:

C++ 20即将发布。开发工具 – 让编写C++代码更加容易!C++在开发者中的稳定位置总而言之,我认为在未来的十年,我们可以以一种积极乐观的态度看待C++。虽然我们无法预知更远的将来会发生什么,但是至少在接下来的十年里,我相信C++应该是稳定的。有了所有这些工具的帮助,新的C++标准编写的C++代码会更加容易访问,并且更加不容易出错。在可预见的将来,C++仍然是追求性能的应用程序的无二选择,甚至它会取代C和Fortran。

原文:https://www.bfilipek.com/2019/12/cpp-status-2019.html

本文为 CSDN 翻译,转载请注明来源出处。

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

玩手机的作文 说明性作文600字 美丽的许昌作文 尊老爱幼英语作文 靖江美食作文 有关成长的作文题目 作文我不再自卑 美丽的山林作文 我变成了天使作文 生活如诗作文600字 关于体操的作文 未来的学校450字作文 选择性忽视作文 人类起源作文 面作文 宁静的校园作文 平安出行作文 我的小狗作文400字 作文的结构框架怎么写 音乐课作文 妈妈对不起作文300字 我家的小院作文 描写秋月的作文 放弃也是一种成功作文 我的家乡泰安作文 议论作文题目 观察作文800字 青春的梦想作文600字 游玩方特作文 关于感动的作文300字