时代的c位(C过去的这一年)

本文旨在让我们回顾 C 2019年里的变化和发展!我们将重点时代的c位(C过去的这一年)(1)关注本年度里 C 上发生的重大事件,标准的发展,工具的变化等等……

时代的c位(C过去的这一年)(2)

作者 | Bartek

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

以下为译文:

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

时代的c位(C过去的这一年)(3)

简介

以下是本年度最让我时代的c位(C过去的这一年)(4)关注的三大方面:

  • C 20即将发布。

  • 开发工具。

  • C 在开发者中的稳定位置。

请继续阅读以获得对以上三大方面的全面了解。

时代的c位(C过去的这一年)(5)

重大事件时间表

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

时代的c位(C过去的这一年)(6)

时代的c位(C过去的这一年)(7)

对C 11/14的编译器支持

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

V时代的c位(C过去的这一年)(8)isual Studio团队宣布V时代的c位(C过去的这一年)(9)isual Studio 2017 15.7版完全支持C 17,这也意味着它对C 11/14的支持。现在,你可以构建复杂的代码库,如boost::hana或range v3。

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

时代的c位(C过去的这一年)(10)

对C 17的编译器支持

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

你可以在这里时代的c位(C过去的这一年)(11)下载一个免费的官方文档的最终版:N4700, 2017-10-16, PDF。

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

你也可以阅读我的博客文章:C 17特性(https://时代的c位(C过去的这一年)(12)www.bfilipek时代的c位(C过去的这一年)(13).com/2017/01/cpp17features.html)。

关于C 17的语言特性:

从Clang版本5.0、 GCC版本8.0、 V时代的c位(C过去的这一年)(14)isual Studio版本15.7和Intel C Compiler版本19.0.1开始,所有编译器都支持C 17的语言特性。

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

对于std :: filesystem的支持,你需要GCC版本8.1(或者支持更好的版本9.1)、Clang版本3.9(或者支持更好的版本7.0)和V时代的c位(C过去的这一年)(15)isual Studio 2017版本15.7。

并行算法的更新最早在V时代的c位(C过去的这一年)(16)isual 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 Sil时代的c位(C过去的这一年)(17)isteanu) :https://solarianprogrammer时代的c位(C过去的这一年)(18).com/2019/05/09/cpp-17-stl-parallel-algorithms-gcc-intel-tbb-linux-macos/

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

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

V时代的c位(C过去的这一年)(19)isual Studio从版本15.7开始支持在from_chars / to_chars函数中支持整形参数,在版本15.8中又添加了对from_chars的浮点支持。但是完全一致的支持直到版本16.4(对to_chars的浮点支持)才开始可用。

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

时代的c位(C过去的这一年)(20)

C 20

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

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

下面列出C 20的时代的c位(C过去的这一年)(24)主要特性:

  • 模块(Modules)

  • 协程(Coroutines)

  • 标准库开箱即用的概念(Concepts)

  • 范围(Ranges)

  • constexpr支持:new/ delete,dynamic_cast,try/catch,虚拟

  • constexpr 向量和字符串

  • 计时(Chrono):日历、时区支持

  • std::format – 详见此处C 20中的std::format

  • std::span

  • std::jthread

更重要的是,很多C 20的特性在流行的编译器中已经实现了。像模块(Modules)支持这种最重要的工作仍然没有完成(我们只是完成了一些实验性的Module-TS实现)。

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

时代的c位(C过去的这一年)(26)

时代的c位(C过去的这一年)(27)

ISO C 标准时代的c位(C过去的这一年)(28)会议

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

这里可以找到所有的时代的c位(C过去的这一年)(30)会议计划,包括:即将举行的时代的c位(C过去的这一年)(31)会议和已经结束的时代的c位(C过去的这一年)(32)会议(https://时代的c位(C过去的这一年)(33)isocpp.org/std/meetings-and-participation/upcoming-meetings)。

下一次时代的c位(C过去的这一年)(34)会议将于2020年2月在布拉格举行。

二月: 夏威夷科纳时代的c位(C过去的这一年)(35)会议

在这次时代的c位(C过去的这一年)(36)会议上,下列C 新特性投票后被批准纳入了C 20标准:

  • 模块 - P1103!

  • 协程 - N4736!

  • 将结构化绑定扩展为更像变量申明 - P1091R3

  • std::polymorphic_allocator<> - P0339

  • std::midpoint和std::lerp - P0811

  • std::execution::unseq执行策略 - P1001

  • std::ssize 返回有符号数的自由函数 - P1227

  • 查找时预先计算hash值 - P0920

并行化TS 第二版也被作为以下标准发布:

ISO/IEC TS 19570:2018编程语言 - 用于并行化的C 扩展技术规范(https://时代的c位(C过去的这一年)(37)www.时代的c位(C过去的这一年)(38)iso.org/standard/70588.html)。

这次时代的c位(C过去的这一年)(39)会议的时代的c位(C过去的这一年)(40)主要时代的c位(C过去的这一年)(41)会议报告摘要可以从如下两个链接找到:

r/cpp: 2019-02 科纳ISO C 标准委员会时代的c位(C过去的这一年)(42)会议报告(https://时代的c位(C过去的这一年)(43)www.reddit时代的c位(C过去的这一年)(44).com/r/cpp/comments/au0c4x/201902_kona_时代的c位(C过去的这一年)(45)iso_c_committee_trip_report_c20/)和科纳时代的c位(C过去的这一年)(46)会议后的邮件列表(https://时代的c位(C过去的这一年)(47)isocpp.org/blog/2019/03/2019-03-post-kona-mailing-available)。

其他版本的时代的c位(C过去的这一年)(48)会议报告链接如下:

  • Herb Sutter – 时代的c位(C过去的这一年)(49)会议报告:冬季ISO C 标准时代的c位(C过去的这一年)(50)会议(科纳)

  • Botond Ballo - 时代的c位(C过去的这一年)(51)会议报告: 2019年2月科纳C 标准时代的c位(C过去的这一年)(52)会议

  • cor3ntin – 科纳时代的c位(C过去的这一年)(53)会议报告

  • Timur Dumler – 时代的c位(C过去的这一年)(54)会议报告:2019年2月夏威夷科纳ISO C 标准委员会时代的c位(C过去的这一年)(55)会议

七月: 德国科隆时代的c位(C过去的这一年)(56)会议

这次时代的c位(C过去的这一年)(57)会议是C 20标准的特性冻结时代的c位(C过去的这一年)(58)会议。这是最后一次投票的机会。

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

这次时代的c位(C过去的这一年)(61)会议批准的一些重要特性和变化如下:

  • 合约(Contracts)从C 20中移除,Contracts研究小组成立。

  • 文本格式化支持:std::format("For C {}", 20) - P0645

  • C 20同步库 - P1135

  • constexpr 内存分配 - P0784

  • constexpr std::vector - P1004

  • constexpr std::string - P0980

  • 线程可中断 join 支持(Stop Token) - P0660

  • source_location - P1208

  • using enum - P1099

  • constinit关键字 - P1143

  • 数学常量 (std::numbers::pi和 friends) - P0631

  • 将概念(Concepts)的命名方式从PascalCase(驼峰式命名法)改为snake_case(蛇形命名法) - P1754

  • 废弃volatile关键字 - P1152

  • 布局兼容性和指针互易性特征 - P0466

  • 构造函数的nod时代的c位(C过去的这一年)(62)iscard 属性 - P1771

  • 改进的iterator concept hierarchy - P1207

  • Move-only视图 - P1456

  • 附加视图和range适配器 - P1035

  • 运算符<=>加入标准库 - P1614

  • 类模板参数推导的扩展 - P1021

这次时代的c位(C过去的这一年)(63)会议的时代的c位(C过去的这一年)(64)主要议程报告摘要可以在下面两个地方找到:

  • r/cpp thread - cologne meeting(https://时代的c位(C过去的这一年)(65)www.reddit时代的c位(C过去的这一年)(66).com/r/cpp/comments/cfk9de/201907_cologne_时代的c位(C过去的这一年)(67)iso_c_committee_trip_report_the/)

  • post Cologne mailing(https://时代的c位(C过去的这一年)(68)isocpp.org/blog/2019/08/2019-08-post-cologne-mailing-available)

时代的c位(C过去的这一年)(69)会议报告:

  • Herb Sutter – 时代的c位(C过去的这一年)(70)会议报告:夏季ISO C 标准时代的c位(C过去的这一年)(71)会议(科隆)

  • Timur Dumler – 时代的c位(C过去的这一年)(72)会议报告: 2019年7月德国科隆C 委员会时代的c位(C过去的这一年)(73)会议,

  • Botond Ballo – 时代的c位(C过去的这一年)(74)会议报告: 2019年7月德国科隆C 标准时代的c位(C过去的这一年)(75)会议

  • Sile时代的c位(C过去的这一年)(76)xica – 时代的c位(C过去的这一年)(77)会议报告: 2019年度德国科隆ISO C 时代的c位(C过去的这一年)(78)会议

  • Guy Davidson – 德国之行:科隆时代的c位(C过去的这一年)(79)会议报告

十一月,北爱尔兰贝尔法斯特时代的c位(C过去的这一年)(80)会议:

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

时代的c位(C过去的这一年)(82)主要的时代的c位(C过去的这一年)(83)会议报告发布在r/cpp网站上,会后的邮件列表地址为: https://时代的c位(C过去的这一年)(84)isocpp.org/blog/2019/12/2019-11-post-belfast-mailing-available

其他的时代的c位(C过去的这一年)(85)会议报告有:

  • Herb Sutter - 时代的c位(C过去的这一年)(86)会议报告:秋季ISO C 标准时代的c位(C过去的这一年)(87)会议(贝尔法斯特)

  • Botond Ballo - 时代的c位(C过去的这一年)(88)会议报告:2019年11月贝尔法斯特C 标准时代的c位(C过去的这一年)(89)会议

  • Ben Craig 时代的c位(C过去的这一年)(90)会议报告:贝尔法斯特的独立错误

  • Guy Davidson - 在我家后院召开的WG21时代的c位(C过去的这一年)(91)会议: 贝尔法斯特时代的c位(C过去的这一年)(92)会议报告

时代的c位(C过去的这一年)(93)

编译器最新版本及说明

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

V时代的c位(C过去的这一年)(94)isual Studio

最新版本是V时代的c位(C过去的这一年)(95)isual Studio 2019版本16.4,最后一次更新发生在12月3日。

– 版本说明:https://docs.microsoft时代的c位(C过去的这一年)(96).com/en-us/v时代的c位(C过去的这一年)(97)isualstudio/releases/2019/release-notes

今年推出了新版V时代的c位(C过去的这一年)(98)isual Studio 2019!它为已经非常出色的集成开发环境(IDE)带来了许多新的特性和增强功能。

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

V时代的c位(C过去的这一年)(99)isual Studio 2019: Code faster. Work smarter. Create 时代的c位(C过去的这一年)(100)the future. | V时代的c位(C过去的这一年)(101)isual Studio Blog(https://devblogs.microsoft时代的c位(C过去的这一年)(102).com/v时代的c位(C过去的这一年)(103)isualstudio/v时代的c位(C过去的这一年)(104)isual-studio-2019-code-faster-work-smarter-create-时代的c位(C过去的这一年)(105)the-future/)。

一些重要的特性:

  • 基于V时代的c位(C过去的这一年)(106)isual Studio IntelliCode的人工智能辅助代码补全。

  • 在C MSBuild和CMake项目中对 Clang 和 MSVC 的 Clang-Tidy 的支持。

  • AddressSanitizer支持 Windows 上使用 MSVC 编译的项目

  • 和CMake更好的集成。

  • 概念(Concepts)在版本16.3 中可用

  • 对to_chars的全面支持, 完善了C 17中的要求。

  • 提供了一个名为C Build Insights的新工具集。欲知详情,请参阅C 团队博客。

另一个时代的c位(C过去的这一年)(107)主要的更新来自Cppcon大会,MSVC团队在会上宣布将他们的标准模板库实现开源!详情请参见:

MSVC宣布开源其标准模板库实现 | C 团队博客(https://devblogs.microsoft时代的c位(C过去的这一年)(108).com/cppblog/open-sourcing-msvcs-stl/)

一些其他新闻:

  • AddressSanitizer (ASan)在 Windows上支持MSVC | C 团队博客

  • 在V时代的c位(C过去的这一年)(109)isual Studio中使用clang-tidy进行代码分析 | C 团队博客

  • V时代的c位(C过去的这一年)(110)isual Studio 2019版本16.3开始支持C 20 Concepts特性 | C 团队博客

这里有一个关于C 标准(包括C 20)的一致性的文档:

Microsoft C 语言一致性清单(https://docs.microsoft时代的c位(C过去的这一年)(111).com/en-us/cpp/overview/v时代的c位(C过去的这一年)(112)isual-cpp-language-conformance?view=vs-2019)。

GCC

最新的稳定版本9.2,发布于8月12日,详情请参见:GCC9发布系列更新(https://时代的c位(C过去的这一年)(113)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时代的c位(C过去的这一年)(114).com/en-us/articles/intel-cpp-compiler-release-notes)

  • Intel® C Compiler对C 14特性的支持(https://software.intel时代的c位(C过去的这一年)(115).com/en-us/articles/c14-features-supported-by-intel-c-compiler)

  • Intel® C Compiler对C 17特性的支持(https://software.intel时代的c位(C过去的这一年)(116).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 语言特性的支持(时代的c位(C过去的这一年)(117)http://docwiki.embarcadero时代的c位(C过去的这一年)(118).com/RADStudio/Rio/en/Modern_C++_Language_Features_Compliance_Status)

时代的c位(C过去的这一年)(119)

各种工具

当编译器帮助C 代码完成了时代的c位(C过去的这一年)(120)主要任务时,我们也不能忘记其他工具的重要性。

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

Clang 工具:

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

  • Clang Tidy

  • Clang-Include-Fixer

  • AddressSanitizer

  • MemorySanitizer

  • 对于V时代的c位(C过去的这一年)(121)isual Studio,你可以使用Clang Power Tools,它是V时代的c位(C过去的这一年)(122)isual Studio的一个扩展.

  • 它由Victor Ciura开发 (@ciura_victor)。

  • 最新版本 5.5于2019年12月18日发布. 详见版本变更日志。

  • 它同时还有一个付费版本。

集成开发环境

V时代的c位(C过去的这一年)(123)isual Ass时代的c位(C过去的这一年)(124)ist – 最新版本发布于2019年11月11日。详见:

  • Tomato Soup博客文章 | V时代的c位(C过去的这一年)(125)isual Ass时代的c位(C过去的这一年)(126)ist 版本2353已经可用(https://blog.wholetomato时代的c位(C过去的这一年)(127).com/2019/11/11/v时代的c位(C过去的这一年)(128)isual-ass时代的c位(C过去的这一年)(129)ist-build-2353-时代的c位(C过去的这一年)(130)is-available/)。

ReSharper C - 最新版本为2019.3, 详见:

  • ReSharper C 博客文章 | ReSharper C 版本2019.3: 支持C 20概念,类型提示, #includes排序, 和其他特性(https://blog.jetbrains时代的c位(C过去的这一年)(131).com/rscpp/resharper-cpp-2019-3/)。

CLion - 最新版本为2019.3, 详见:

  • CLion博客文章 | CLion 2019.3:一个专注于性能和一些期待已久的增强功能的高质量发布(https://blog.jetbrains时代的c位(C过去的这一年)(132).com/clion/2019/11/clion-2019-3-release/)。

Cevelop版本1.13.0 发布(https://时代的c位(C过去的这一年)(133)www.cevelop时代的c位(C过去的这一年)(134).com/2019/10/23/cevelop-1.13.0-release.html)。

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

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

代码分析器:

CppDepend 版本2019.3:

  • CppDepend – 2019.3版本的新功能(https://时代的c位(C过去的这一年)(135)www.cppdepend时代的c位(C过去的这一年)(136).com/cppdependv2019)!

  • 今年,该团队增加了对如下工作的支持:MISRA编码准则、VS 2019、QT项目、UI简化和嵌入式项目。

PVS-Studio:这是一个使用C、C 和C#编写的,用于在程序源代码中进行错误检测的工具。在Windows和Linux环境下都能够工作。

  • 最新版本是PVS-Studio 版本7.05,请参阅今年的所有发布说明(https://时代的c位(C过去的这一年)(137)www.viva64时代的c位(C过去的这一年)(138).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过去的这一年)(139)

C 相关时代的c位(C过去的这一年)(140)会议

我们没有理由抱怨C 时代的c位(C过去的这一年)(141)会议的缺乏。实际上今年有很多时代的c位(C过去的这一年)(142)会议机会,尤其是在春季和秋季,下面是几个时代的c位(C过去的这一年)(143)会议的例子:

  • CppCon – 2019年9月举行

  • C Now – 2019年5月举行

  • Meeting C - 2019年11月举行

  • ACCU – 春季时代的c位(C过去的这一年)(144)会议在2019年4月举行,秋季时代的c位(C过去的这一年)(145)会议在11月举行

还有很多其他的时代的c位(C过去的这一年)(146)会议,如:Code::Dive、C 意大利大会、C on Sea、C 意大利日、C 时代的c位(C过去的这一年)(147)俄罗斯大会、核心C 2019大会、等等。

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

以防万一,这里是ISO C 网站上的全球注册时代的c位(C过去的这一年)(151)会议的链接:C 全球时代的c位(C过去的这一年)(152)会议和 FAQ(https://时代的c位(C过去的这一年)(153)isocpp.org/wiki/faq/conferences-worldwide/)。

时代的c位(C过去的这一年)(154)

社区和用户组

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

我很高兴,我所在的城市(Cracow)的用户组C Krakow用户组(https://时代的c位(C过去的这一年)(156)www.meetup时代的c位(C过去的这一年)(157).com/C-User-Group-Cracow):今年将继续存在,如果你住在附近的话时代的c位(C过去的这一年)(158)可以加入!

如果你在查看完这个全球用户组列表后确认你附近没有C 用户组。你还时代的c位(C过去的这一年)(159)可以加入如下用户组:

  • C Slack频道: https://cpplang.now.sh/

  • #include C (https://时代的c位(C过去的这一年)(160)www.includecpp.org/)

C Poland

时代的c位(C过去的这一年)(161)

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

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

时代的c位(C过去的这一年)(162)

书籍和课程

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

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

时代的c位(C过去的这一年)(163)

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

时代的c位(C过去的这一年)(164)

时代的c位(C过去的这一年)(165)

受欢迎程度

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时代的c位(C过去的这一年)(166).com/survey/2019#technology)

  • 在GitHub调查中,C 排名从去年的第5下降到今年的第6。详见:2019 Octoverse 统计报告(https://octoverse.github时代的c位(C过去的这一年)(167).com/#top-languages)

我个人觉得,C 仍然很强大。也许它并不完美,也不容易学习,但是很多代码仍然是用这种语言构建的。Rust或其他系统语言不会很快取代它。它的工具越来越好,而这个语言正在致力于降低它的复杂性,所以初学者的体验希望是越来越好。

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

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

让我们看看Daniel Lemire的评价:

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

时代的c位(C过去的这一年)(168)

问卷调查

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

C 标准的使用

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

时代的c位(C过去的这一年)(169)

时代的c位(C过去的这一年)(170)

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

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

C 17的使用经验

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

时代的c位(C过去的这一年)(172)

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

C 20的使用经验

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

时代的c位(C过去的这一年)(173)

编译器的使用

你使用什么编译器?

时代的c位(C过去的这一年)(174)

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

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

时代的c位(C过去的这一年)(175)

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

去年我没有问这个问题。

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

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

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

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

  • CppCon 2019大会

  • C 20 新特性和标准化

  • C 20中的模块(Modules)特性

  • 协程(Coroutines)

  • 概念(Concepts)

  • 范围(Ranges)

  • std::format

  • Code::Dive 2019大会

  • Meeting C 2019大会

  • C 博客 - 帮助更容易学习和掌握最新的语言

  • C 书籍和课程 – 提升水平,更多的选择机会

  • C Cast

  • C 社区 – 大会,用户组

  • 越来越好用的工具:Clang build analyser, VS 2019, QTCreator, CLion

有些人还列出了一些个人成就:例如,开始使用C 17,在大会上的第一次演讲。有人提到在项目中引入Conan,有人换了工作。还有人反馈说“终于退休了”。这些对所有人都有益处!

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

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

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

其他问卷调查

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

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

调查结果.

还有一项来自Jetbrains的调查:C 2019 - 2019信息图表中开发者生态系统状态调查(https://时代的c位(C过去的这一年)(179)www.jetbrains时代的c位(C过去的这一年)(180).com/lp/devecosystem-2019/cpp/)

时代的c位(C过去的这一年)(181)

总结

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

  • C 20即将发布。

  • 开发工具 – 让编写C 代码更加容易!

  • C 在开发者中的稳定位置

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

原文:https://时代的c位(C过去的这一年)(182)www.bfilipek时代的c位(C过去的这一年)(183).com/2019/12/cpp-status-2019.html

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

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页