C++

分享:

这些问题仅向选择 C++ 作为其三种主要编程语言之一的开发者显示。

分享:

您经常使用哪种(哪些)C++ 标准?

8%

C++98/C++03

27%

C++11

21%

C++14

43%

С++17

29%

C++20

10%

С++23

13%

不确定

6%

C++98/C++03

28%

C++11

27%

C++14

48%

С++17

37%

C++20

14%

С++23

13%

不确定

5%

C++98/C++03

25%

C++11

15%

C++14

48%

С++17

39%

C++20

16%

С++23

10%

不确定

Diego Rodriguez-Losada Gonzalez

JFrog 首席架构师

C++23 和早期标准的采用水平并不令人意外:采用模式实际上与近年来相同,只是时间发生变化。2023 年 C++23 的采用率为 10%,略低于 2020 年 C++20 的采用率 (12%),这可能与 C++20 与 C++23 相比带来的新功能数量有关。

Inbal Levi

MPGC Services Ltd (Millennium) 首席软件工程师,WG21 委员会成员

很高兴看到嵌入式和游戏行业中有很大一部分开发者已经在使用 C++20 了。此版本扩展了编译时的能力,这对于那些非常重视运行时性能的行业非常有利。我希望看到在未来的几年里,C++23 也有类似的采用率。

Bryce Adelstein Lelbach

NVIDIA 的首席架构师

C++20 采用率的大幅提升是可以理解的,因为它的实现已经变得更加成熟,而且功能更加完整。我认为在接下来的几年里,我们将看到从 C++17 到 C++20 的重大转变,后者将成为社区大部分人的“基础”方言。

C++ 标准迁移

57%

否,我不计划迁移到其他 C++ 标准

12%

C++11

2%

C++14

16%

С++17

9%

C++20

5%

С++23

50%

否,我不计划迁移到其他 C++ 标准

1%

C++98/C++03

4%

C++14

21%

С++17

13%

C++20

10%

С++23

42%

否,我不计划迁移到其他 C++ 标准

2%

C++98/C++03

5%

C++11

25%

С++17

19%

C++20

7%

С++23

45%

否,我不计划迁移到其他 C++ 标准

1%

C++11

1%

C++14

31%

C++20

22%

С++23

Diego Rodriguez-Losada Gonzalez

JFrog 首席架构师

57% 使用 C++98/03 的受访者不打算改用其他标准?这可能会令人失望,但总体而言,只有 8% 的受访者仍在使用 C++98/03,这意味着全世界只有约 4% 的 C++ 代码使用旧标准,这还不错,与其他编程语言类似。

您当前的项目是否计划在未来 12 个月内使用以下 C++20 功能?

48%
53%

概念

43%
49%

模块

32%
29%

协程

3%
3%

其他

29%
21%

Diego Rodriguez-Losada Gonzalez

JFrog 首席架构师

虽然最近在构建系统以及支持 C++20 模块的生态系统方面取得了很大进展,但在我看来,有一半受访者计划在接下来一年内使用 C++20 模块(我认为是在生产中)的数字似乎过于乐观。我认为我们在未来 12 个月内不会实现这一目标。

Inbal Levi

MPGC Services Ltd (Millennium) 首席软件工程师,WG21 委员会成员

我真的很高兴看到嵌入式领域中功能的快速采用,传统上人们认为嵌入式领域的功能采用速度很慢。我相信这也与 C++20 能够为嵌入式领域带来的巨大益处有关。

Bryce Adelstein Lelbach

NVIDIA 的首席架构师

我想知道有多少人真正尝试过使用模块。有很多人对此很感兴趣,但采用率却不高。

您最常使用哪款 IDE 或编辑器进行 C++ 开发?

27%

Visual Studio Code

26%

CLion

26%

Visual Studio

4%

Vi/Vim

3%

Qt Creator

2%

Android Studio

2%

Xcode

1%

NetBeans

1%

Sublime

1%

Emacs

1%

KDevelop

1%

AppCode

1%

Eclipse CDT

4%

其他

34%

Visual Studio Code

29%

CLion

19%

Visual Studio

6%

Vi/Vim

3%

Qt Creator

1%

NetBeans

1%

Sublime

2%

Emacs

2%

Eclipse CDT

3%

其他

20%

Visual Studio Code

30%

CLion

30%

Visual Studio

2%

Vi/Vim

1%

Qt Creator

1%

Android Studio

2%

Xcode

2%

Sublime

2%

Emacs

1%

KDevelop

1%

Eclipse CDT

1%

Atom

8%

其他

Diego Rodriguez-Losada Gonzalez

JFrog 首席架构师

这个市场显然由 Microsoft 和 JetBrains 主导。VS Code 的快速增长似乎终于开始放缓(至少在 C++ 受众中),并且三个主要参与者(CLion、VS 和 VS Code)似乎开始占据同等份额。

您经常使用哪种(哪些)单元测试框架(如果有)?

26%

29%

我不为 C++ 编写单元测试

17%

16%

我编写单元测试,但不使用任何框架

35%

33%

GoogleTest

12%

12%

Catch

9%

9%

CppUnit

Diego Rodriguez-Losada Gonzalez

JFrog 首席架构师

很遗憾,29% 的受访者仍然不为他们的 C++ 代码编写单元测试。即使多年来这一数字一直在缓慢下降,但速度还不够快。这门语言的未来也取决于这一问题是否能够得到解决。

Inbal Levi

MPGC Services Ltd (Millennium) 首席软件工程师,WG21 委员会成员

我惊奇地发现,有许多开发者在编写单元测试时不使用框架。委员会正在努力推广软件包管理器主题,我希望这能够对未来几年这些数字的降低产生影响,无论是对于那些不编写单元测试的人还是那些在编写单元测试时不使用框架的人。

您在 C++ 中如何管理第三方库?

25%

24%

库的源代码是我的构建的一部分

21%

21%

我使用系统软件包管理器

24%

19%

我使用指令分别编译这些库

18%

18%

我从网上下载预构建的库

14%

15%

我没有任何依赖项

Diego Rodriguez-Losada Gonzalez

JFrog 首席架构师

很高兴看到使用指令手动编译库的开发者越来越少。自动化解决方案的使用有望进一步减少这种做法,而这是 C 和 C++ 生态系统所独有的。

Inbal Levi

MPGC Services Ltd (Millennium) 首席软件工程师,WG21 委员会成员

我认为这是一个很好的迹象,表明整个 C++ 社区对软件包管理器的广泛支持很有必要。

Bryce Adelstein Lelbach

NVIDIA 的首席架构师

我们迟早会到达一个拐点,届时,这些软件包管理器(vcpkg、Conan 等)将变得足够成熟,并得到广泛的使用,从而成为事实上的标准。但是,我们还没有到达这个拐点。

您经常使用哪种(哪些)项目模型或构建系统?

57%

54%

CMake

33%

29%

Visual Studio 项目

33%

28%

Makefile

11%

15%

Ninja

9%

6%

Gradle

Bryce Adelstein Lelbach

NVIDIA 的首席架构师

非常有趣的是,CMake 的市场份额下降了,而 Ninja 的市场份额却上升了。这是我始料未及的趋势。也许这只是干扰信息,但考虑到 CMake 迄今为止的快速增长,此数据表明它已达到峰值饱和度。

您经常使用哪种(哪些)编译器?

65%

GCC

36%

Clang

31%

MSVC

13%

Clang-cl

11%

Intel

9%

Intel LLVM

7%

适用于微控制器的编译器

3%

定制

2%

其他

除 C++ 外,您在项目中还使用哪种(哪些)编程语言?

45%

Python

29%

C

16%

Shell 脚本语言

14%

JavaScript

13%

Java

12%

SQL

10%

HTML/CSS

10%

C#

5%

Rust

5%

汇编

4%

Go

4%

Lua

3%

TypeScript

3%

MATLAB

2%

Kotlin

2%

PHP

2%

Visual Basic

2%

Perl

1%

Objective-C

Diego Rodriguez-Losada Gonzalez

JFrog 首席架构师

Python 是 C++ 开发者工具包中另一个非常有用的工具。

Bryce Adelstein Lelbach

NVIDIA 的首席架构师

JavaScript 和 Rust 更多地与 C++ 结合使用似乎是一种趋势。虽然 Rust 越来越受欢迎,但令人惊讶的是,Rust + C++ 的增长速度并没有加快。这表明与新项目相比,在已有项目中使用 Rust 可能更加困难。

您或您的团队使用以下哪种(哪些)工具来执行准则或进行其他代码质量/分析?

37%

31%

我的 IDE 提供的工具

24%

27%

Clang-tidy

21%

24%

ClangFormat

17%

18%

Clang-analyzer/Clang Static Analyzer

10%

11%

Cppcheck

Bryce Adelstein Lelbach

NVIDIA 的首席架构师

我认为 IDE 提供的分析工具的减少表明人们将静态分析融入到他们的 CI 中,比如在 GitHub Actions 中运行 Clang-Tidy/ClangFormat/Clang Static Analyzer。

您或您的团队如何运行代码分析?

50%

编译时,通过启用必要编译器检查

27%

它已集成到我们的 CI/CD 管道中

23%

我们从不运行代码分析

19%

我们使用动态分析

18%

通过在开发者机器上运行的第三方静态代码分析器

1%

其他

您使用哪种(哪些)工具或技术来优化您的 C++ 项目构建时间?

39%

优化头 include 和依赖项

28%

预编译头

23%

并行编译源文件

19%

编译器缓存

14%

模块

12%

增量链接

6%

Unity 构建

4%

Incredibuild

1%

Electric Cloud

1%

其他

32%

46%

优化头 include 和依赖项

26%

预编译头

29%

并行编译源文件

22%

编译器缓存

17%

模块

14%

增量链接

6%

Unity 构建

2%

Incredibuild

1%

Electric Cloud

1%

其他

29%

46%

优化头 include 和依赖项

35%

预编译头

25%

并行编译源文件

24%

编译器缓存

16%

模块

16%

增量链接

11%

Unity 构建

7%

Incredibuild

1%

Electric Cloud

2%

其他

28%

Diego Rodriguez-Losada Gonzalez

JFrog 首席架构师

五到十年前,C++ IDE 市场基本上由一款特定于 Windows 的产品 Visual Studio 主导。过去人们在 Windows 上进行开发只是为了使用一款好的 IDE。如今,我们在这个领域有两个主要供应商 – JetBrains 和 Microsoft,这对用户来说非常好。借助 Visual Studio Code 和 CLion,非 Windows 开发者现在可以更轻松地访问 IDE。

感谢您的参与!

我们真诚地希望您能发现我们的报告有用。与您的朋友和同事分享这份报告。

如果您有任何疑问或建议,请发送电子邮件至 surveys@jetbrains.com