C++

Поделиться:

На вопросы о C++ отвечали только те, кто выбрал его в качестве одного из трех основных языков программирования.

Какие стандарты C++ вы регулярно используете?

8%

C++98 / C++03

31%

C++11

25%

C++14

41%

C++17

23%

C++20

14%

Затрудняюсь с ответом

12%

C++98 / C++03

33%

C++11

24%

C++14

41%

C++17

23%

C++20

12%

Затрудняюсь с ответом

9%

C++98 / C++03

31%

C++11

24%

C++14

45%

C++17

25%

C++20

12%

Затрудняюсь с ответом

Приятно видеть, как стабильно идет переход на более новые стандарты. Меня особенно радует, как принимают C++20 разработчики игр, и я надеюсь на поддержку со стороны всех игровых платформ. Конечно, придется повозиться с внедрением этого стандарта, но я уверен, что одни только концепты и диапазоны того стоят.

Гай Дэвидсон

Руководитель отдела разработки в Creative Assembly

Меня удивило, как широко используется C++20. Времена меняются: люди переходят на новые стандарты гораздо быстрее, чем раньше.

Джейсон Тернер

Преподаватель C++, спикер, автор, видеоблогер

Очень радует, что подавляющее большинство использует релизы последних пяти лет. И то, что количество пользователей версий до C++11 упало ниже 10%, — тоже отличные новости. Еще пара лет — и можно будет вообще не включать их в опросы!

Тайтус Уинтерс

Ведущий инженер в Google

Переход на новые стандарты C++

42%

Не планирую переходить на другой стандарт C++

15%

на C++11

11%

на C++14

18%

на C++17

16%

на C++20

45%

Не планирую переходить на другой стандарт C++

9%

на C++14

20%

на C++17

26%

на C++20

41%

Не планирую переходить на другой стандарт C++

30%

на C++17

29%

на C++20

47%

Не планирую переходить на другой стандарт C++

53%

на C++20

Важно не забывать, что многие пользуются самыми разными версиями стандарта. Такие исследования лишний раз напоминают, что код, который мы пишем, должен работать везде, а не только с новейшим стандартом языка.

Гай Дэвидсон

Руководитель отдела разработки в Creative Assembly

Меня удивляют эти цифры, потому что пока еще мало кто заказывает обучение по C++20. Многие радуются, когда переходят на C++17.

Джейсон Тернер

Преподаватель C++, спикер, автор, видеоблогер

Планируете ли вы в ближайший год использовать в текущем проекте какие-либо из этих возможностей C++20?

48%

Концепты

43%

Модули

32%

Корутины

3%

Другое

29%

Ничего из перечисленного

56%

Концепты

46%

Модули

30%

Корутины

2%

Другое

28%

Ничего из перечисленного

53%

Концепты

53%

Модули

42%

Корутины

1%

Другое

23%

Ничего из перечисленного

Мне кажется, Modules еще нуждаются в доработке, но буду рад ошибаться.

Гай Дэвидсон

Руководитель отдела разработки в Creative Assembly

Надеюсь, инструментарий подтянется, и в ближайшем году пользоваться Modules станет удобно.

Джейсон Тернер

Преподаватель C++, спикер, автор, видеоблогер

Какую IDE или редактор вы чаще всего используете для разработки на C++?

28%

Visual Studio

28%

Visual Studio Code

24%

CLion

5%

Vi/Vim

3%

QtCreator

2%

Xcode

1%

Android Studio

23%

Visual Studio

33%

Visual Studio Code

25%

CLion

3%

Vi/Vim

3%

QtCreator

1%

Xcode

2%

Android Studio

43%

Visual Studio

17%

Visual Studio Code

18%

CLion

3%

Vi/Vim

2%

QtCreator

2%

Xcode

1%

Emacs

JetBrains предлагает несколько IDE для разработки на C++: CLion для разработки кросс-платформенного и встраиваемого ПО, ReSharper C++ для пользователей Visual Studio и Rider для разработчиков игр на Unreal Engine и C++. Они помогут вам разобраться с тонкостями языка и облегчат взаимодействие с ним.

Какие фреймворки вы регулярно используете для юнит-тестирования?

35%

Google Test

26%

Не пишу юнит-тесты для C++

17%

Пишу юнит-тесты, но не использую фреймворки

12%

Catch

9%

CppUnit

7%

Boost.Test

3%

CppUTest

3%

doctest

4%

Другое

34%

Google Test

17%

Не пишу юнит-тесты для C++

21%

Пишу юнит-тесты, но не использую фреймворки

14%

Catch

14%

CppUnit

7%

Boost.Test

5%

CppUTest

3%

doctest

4%

Другое

21%

Google Test

27%

Не пишу юнит-тесты для C++

21%

Пишу юнит-тесты, но не использую фреймворки

17%

Catch

11%

CppUnit

7%

Boost.Test

3%

CppUTest

4%

doctest

6%

Другое

Разработчики предпочитают писать код, а не тесты для него, и временные затраты на написание этих тестов превышают любую долгосрочную выгоду.

Гай Дэвидсон

Руководитель отдела разработки в Creative Assembly

То, что четверть разработчиков вообще не пишут юнит-тесты, меня пугает. У меня нет точных рецептов, как это делать и какой фреймворк использовать, но этим должны заниматься все.

Тайтус Уинтерс

Ведущий инженер в Google

Как вы управляете сторонними библиотеками в C++?

25%

Включаю исходный код библиотек в свою сборку

24%

Компилирую библиотеки отдельно, пользуясь их инструкциями

21%

Использую системный менеджер пакетов

18%

Скачиваю уже собранные библиотеки из интернета

14%

Ничто из вышеперечисленного: у меня нет никаких зависимостей

8%

vcpkg

6%

Conan

6%

Nuget

1%

build2

1%

Hunter

5%

Другое

28%

Включаю исходный код библиотек в свою сборку

26%

Компилирую библиотеки отдельно, пользуясь их инструкциями

24%

Использую системный менеджер пакетов

21%

Скачиваю уже собранные библиотеки из интернета

9%

Ничто из вышеперечисленного: у меня нет никаких зависимостей

4%

vcpkg

5%

Conan

7%

Nuget

1%

build2

7%

Другое

34%

Включаю исходный код библиотек в свою сборку

25%

Компилирую библиотеки отдельно, пользуясь их инструкциями

17%

Использую системный менеджер пакетов

27%

Скачиваю уже собранные библиотеки из интернета

12%

Ничто из вышеперечисленного: у меня нет никаких зависимостей

8%

vcpkg

4%

Conan

7%

Nuget

2%

build2

5%

Другое

Здесь отражена текущая ситуация с упаковкой кода C++, чтобы его могли использовать другие. Хочется верить, что эта проблема будет решена, но я на это не рассчитываю.

Гай Дэвидсон

Руководитель отдела разработки в Creative Assembly

Ситуация с управлением зависимостями и пакетами меня расстраивает. Воспроизводимость сборки и прозрачность цепочек зависимостей — это очень важно, но пока что очень многое ограничивается отношением «вроде работает».

Тайтус Уинтерс

Ведущий инженер в Google

Какие проектные модели или системы сборки вы регулярно используете?

57%

CMake

33%

Makefile

33%

Проектная модель Visual Studio

11%

Ninja

9%

Gradle

7%

Проект Xcode

6%

Собственная система сборки

4%

Qmake

3%

Bazel

2%

Autotools

63%

CMake

43%

Makefile

29%

Проектная модель Visual Studio

15%

Ninja

12%

Gradle

4%

Проект Xcode

4%

Собственная система сборки

6%

Qmake

2%

Bazel

3%

Autotools

54%

CMake

33%

Makefile

49%

Проектная модель Visual Studio

8%

Ninja

10%

Gradle

9%

Проект Xcode

8%

Собственная система сборки

3%

Qmake

3%

Bazel

3%

Autotools

Я давно уже говорю, что использование CMake сродни стокгольмскому синдрому. Как бы то ни было, де-факто она стала стандартом, и безоговорочное лидерство в этом опросе только подтверждает это.

Гай Дэвидсон

Руководитель отдела разработки в Creative Assembly

Какие компиляторы вы регулярно используете?

67%

GCC

36%

Clang

32%

MSVC

12%

Clang-cl

11%

Intel

7%

Компилятор для микроконтроллеров

6%

IntelLLVM

3%

Собственной разработки

2%

Другое

В CLion можно использовать компиляторы на основе GCC, а также Clang, MSVC и IAR. В особых случаях функция Custom Compiler позволяет использовать вообще любой компилятор.

Какие языки программирования вы используете в проектах, помимо C++?

44%

Python

30%

C

19%

Языки сценариев командной оболочки

15%

Java

12%

SQL

11%

JavaScript

11%

C#

9%

HTML / CSS

5%

Язык ассемблера

5%

Go

В сфере искусственного интеллекта и машинного обучения повсеместно используется Python, так что здесь никаких сюрпризов. Вполне естественный выбор благодаря таким отличным библиотекам, как numpy и pandas. Возможно, нужно что-то похожее в стандартной библиотеке, или же надо решать проблему с управлением зависимостями.

Гай Дэвидсон

Руководитель отдела разработки в Creative Assembly

Какие инструменты вы используете для соблюдения стандартов или контроля качества кода?

37%

Инструмент, встроенный в IDE

24%

Clang-tidy

21%

ClangFormat

17%

Clang-analyzer / Clang Static Analyzer

10%

Cppcheck

7%

Cpplint

6%

SonarLint / SonarQube / SonarCloud

4%

Coverity

2%

PVS-Studio

2%

Parasoft C/C++test

Только 30% людей избегают статического анализа, так что я уверен, что открытый код станет надежнее и безопаснее.

Гай Дэвидсон

Руководитель отдела разработки в Creative Assembly

Как вы или ваша команда выполняете анализ кода?

48%

При компиляции с помощью соответствующих проверок в компиляторе

26%

Он встроен в наш CI/CD-пайплайн

24%

Мы не выполняем анализ кода

20%

Мы применяем динамический анализ

17%

С помощью сторонних анализаторов статического кода на компьютерах разработчиков

1%

Другое

Какие инструменты или техники вы используете для ускорения сборки проекта на C++?

42%

Оптимизация добавления заголовков в файл и зависимостей

30%

Предварительная компиляция заголовков

22%

Параллельная компиляция исходных файлов

17%

Кэш компилятора

15%

Модули

12%

Пошаговая компоновка

5%

Сборки Unity

В данном случае мало — это хорошо. Интересно посмотреть, как в ближайшем году будут взаимодействовать предварительно скомпилированные заголовки, модули и сборки Unity.

Гай Дэвидсон

Руководитель отдела разработки в Creative Assembly

Спасибо, что уделили время!

Если результаты исследования показались вам интересными, поделитесь ими с друзьями и коллегами.

Если у вас есть вопросы или пожелания, свяжитесь с нами по адресу surveys@jetbrains.com.