C++軟件工程師Bartek發(fā)布博客,回顧了C++ 2019年的發(fā)展情況。
Bartek主要介紹了2019年C++特性上的演進(jìn)、在全球的會(huì)議重大進(jìn)展、相關(guān)工具的改進(jìn),以及C++20新特性的期待,他總結(jié)成三大關(guān)注點(diǎn):
C++20即將發(fā)布
工具,現(xiàn)在編寫(xiě)C++代碼更加容易
C++在開(kāi)發(fā)者中的穩(wěn)定地位
(需要注意的是,文章提出的只是Bartek的觀點(diǎn),并不代表整個(gè)ISO C++委員會(huì)的觀點(diǎn)。)
從下表可以看出來(lái),在2019年,C++社區(qū)做了許多事情,像我們關(guān)注的新特性方面的進(jìn)展也有不少,比如Clang8.0.0、9.0.0發(fā)布、VS 2019發(fā)布與GCC 9.1發(fā)布等。
簡(jiǎn)單總結(jié)起來(lái),從Clang 5.0、GCC 8.0、Visual Studio 15.7和Intel C++ Compiler 19.0.1開(kāi)始,所有編譯器都支持C++語(yǔ)言特性。雖然C++標(biāo)準(zhǔn)庫(kù)需要其它支持,特別是并行算法和文件系統(tǒng)之類(lèi)的要點(diǎn)。std::filesystem需要使用到GCC 8.1(或更高版本的GCC 9.1)、Clang 3.9(或更高版本7.0)和Visual Studio 2017 15.7。并行算法更新最早在Visual Studio 2017 15.7中可用,但隨著之后的更新,MSVC團(tuán)隊(duì)添加了更多算法。
關(guān)于C++20的討論在今年占據(jù)主導(dǎo)地位,目前特性已經(jīng)凍結(jié),主要特性包括:
模組
協(xié)程
標(biāo)準(zhǔn)庫(kù)Concepts的概念
范圍
constexpr支持:new/delete,dynamic_cast,try/catch,虛擬
constexpr向量和字符串
計(jì)時(shí):日歷、時(shí)區(qū)支持
std::format
std::span
std::jthread
目前流行的編譯器已經(jīng)實(shí)現(xiàn)了許多C++20特性。Bartek列了一個(gè)C++20新特性的小表:
工具方面,首先Visual Studio對(duì)C++提供了眾多新的支持,包括:
使用Visual Studio IntelliCode的AI輔助代碼補(bǔ)全
C++ MSBuild和CMake項(xiàng)目中對(duì)Clang和MSVC的Clang-Tidy的支持
AddressSanitizer支持Windows上使用MSVC編譯的項(xiàng)目
與CMake更好地集成
Concepts在16.3中可用
全面的to_chars()支持,滿足了C++ 17的要求
提供了一個(gè)名為C++ Build Insights的新工具集合。
Clang/LLVM提供了許多強(qiáng)大的實(shí)用程序,比如:
Clang Tidy
Clang-Include-Fixer
AddressSanitizer
MemorySanitizer
代碼分析器CppDepend v2019.3增加了對(duì)MISRA編碼準(zhǔn)則的支持,VS 2019支持、QT項(xiàng)目、簡(jiǎn)化的UI、嵌入式項(xiàng)目支持。
PVS-Studio,這是一個(gè)使用C/C++和C#編寫(xiě)的程序源代碼中的錯(cuò)誤檢測(cè)工具,2019年的一些顯著變化包括.NET Core 3和3.1項(xiàng)目分析、MISRA準(zhǔn)則支持、40多項(xiàng)新檢查、對(duì)Java、SonarQube插件的支持。
包管理器Conan與Microsoft/vcpkg也都有一些新變化。
最后Bartek介紹了2019年C++在開(kāi)發(fā)者人群中的地位依然穩(wěn)定:
TIOBE編程語(yǔ)言排行榜中C++排到了第4位。
在StackOverflow調(diào)查中,C++位于C上方的第9位。
在GitHub的調(diào)查中,C++排名第6。
除了這些榜單,Bartek自己也做了一個(gè)簡(jiǎn)單的調(diào)查問(wèn)卷,結(jié)果顯示了關(guān)于C++的使用情況,包括使用的標(biāo)準(zhǔn)庫(kù)版本、工具的選擇與對(duì)C++20新特性的使用等: