- PVSM.RU - https://www.pvsm.ru -

Коллекционирую лучшие C++ практики

Коллекционирую лучшие C++ практики

Что-то наши публикации всё больше о плохом, чем о хорошем. Здесь баг, тут код с запахом, это антипаттерн, вот так писать не надо. Помогите увидеть светлую сторону программирования на С++. Оставляйте комментарии.

Я увидел на Reddit дискуссию "Good repos for beginners to browse that follow best modern C++ practices (including testing, static analysis etc...) [1]". Обсуждение получилось не очень большое и интересное. И тут я подумал, а не попробовать ли повторить опрос на Хабре, как я поступил [2] с вредными советами.

Кстати, идея с вредными советами развивается. Скоро я планирую выпустить мини-книгу с 60 антисоветами по C++. Подписывайтесь [3] на ежемесячную рассылку у нас на сайте, чтобы не пропустить наиболее интересные публикации.

Итак, тема вредных советов раскрыта :). Время пособирать хорошие практики!

Я начну, а вас приглашаю присоединиться и написать в комментариях:

  • какие инструменты вы рекомендуете;
  • какие интересные и полезные библиотеки используете;
  • какие проекты можно посмотреть с точки зрения обучения;
  • посоветуйте практики, стандарты кодирования;
  • и так далее.

Стартеры

  1. ModernCppStarter [4]. Kick-start your C++! A template for modern C++ projects using CMake, CI, code coverage, clang-format, reproducible dependency management and much more.
  2. gui_starter_template [5]. This is a C++ Best Practices GitHub template for getting up and running with C++ quickly.

Проекты для изучения

Примечание для себя. Если буду потом писать статью по собранной информации, надо проверить эти и другие предложенные проекты с помощью PVS-Studio. А то библиотеки разные бывают... [6] Не хочется что-то потенциально глючное рекомендовать как пример для подражания.

  1. Diligent Engine [7]. A Modern Cross-Platform Low-Level 3D Graphics Library and Rendering Framework Tweet.
  2. JSON for Modern C++ [8]. Intuitive syntax. Trivial integration. Serious testing. Memory efficiency. Speed.
  3. Stroika [9] is a modern, portable, thread-savvy, C++ application framework. It makes writing high performance C++ applications easier by providing safe, flexible, modular building blocks.
  4. concurrencpp [10]. Modern concurrency for C++. Tasks, executors, timers and C++20 coroutines to rule them all.
  5. awesome-hpp [11]. A curated list of awesome header-only C++ libraries.

Ускорение сборки

  1. Я отсылаю к статье коллеги "Ускорение сборки C и C++ проектов [12]" и его же лекцию [13] на эту тему.
  2. Есть разные старые [14] и новые [15] дискуссии на эту тему. Жду разного нового интересного на эту тему от читателей. Заранее спасибо.

Стандарты кодирования и рекомендации

  1. The C++ Core Guidelines [16] are a collaborative effort led by Bjarne Stroustrup, much like the C++ language itself. They are the result of many person-years of discussion and design across a number of organizations.
  2. Collaborative Collection of C++ Best Practices [17]. This online resource is part of Jason Turner's collection of C++ Best Practices resources. Кстати, раз упомянули Джейсона, стоит ещё оставить ссылочку на его канал C++ Weakly [18].
  3. Google C++ Style Guide [19]. The goal of this guide is to manage this complexity by describing in detail the dos and don'ts of writing C++ code. These rules exist to keep the code base manageable while still allowing coders to use C++ language features productively.

Динамический анализ кода

  1. AddressSanitizer [20] для поиска ошибок с памятью.
  2. LeakSanitizer [21] для поиска утечек памяти.
  3. ThreadSanitizer [22] для поиска гонки данных и взаимных блокировок.
  4. MemorySanitizer [23] для поиска использования неинциализированной памяти.
  5. HWASAN [24], или Hardware-assisted AddressSanitizer, новый вариант AddressSanitizer, что потребляет меньше памяти.
  6. UBSan [25] для поиска неопределённых поведений в программе.

Статические анализаторы кода

  1. Здесь я прикинусь дурачком и вспомню только наш PVS-Studio. А что, очень хороший мощный статический анализатор кода [26]. Используя его, вы сможете находить множество ошибок и потенциальных уязвимостей ещё на этапе написания C++ кода.
  2. TODO. Прошу читателей делиться собственным успешных опытом использования других статических анализаторов кода.

Книги и другие ссылки

  1. Я всегда всем рекомендую прочитать книгу "Совершенный код" С. Макконнелла (ISBN 978-5-7502-0064-1).
  2. C++ Best Practices (2019) [27].
  3. Главный вопрос программирования, рефакторинга и всего такого [28].
  4. C++ Coding Standards: 101 Rules, Guidelines, and Best Practices [29].
  5. Скотт Майерс. "Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ" (3-е издание).
  6. Скотт Майерс. "Эффективный и современный C++. 42 рекомендации по использованию C++11 и C++14".

Ваша очередь

Прошу делиться всем, что, на ваш взгляд, полезно C++ программистам!

Автор: Андрей Карпов

Источник [30]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/381666

Ссылки в тексте:

[1] Good repos for beginners to browse that follow best modern C++ practices (including testing, static analysis etc...): https://www.reddit.com/r/cpp/comments/z3i2ae/good_repos_for_beginners_to_browse_that_follow/

[2] поступил: https://habr.com/ru/company/pvs-studio/blog/599219/

[3] Подписывайтесь: https://pvs-studio.com/ru/subscribe/

[4] ModernCppStarter: https://github.com/TheLartians/ModernCppStarter

[5] gui_starter_template: https://github.com/cpp-best-practices/gui_starter_template

[6] А то библиотеки разные бывают...: https://pvs-studio.com/ru/blog/posts/cpp/0762/

[7] Diligent Engine: https://github.com/DiligentGraphics/DiligentEngine

[8] JSON for Modern C++: https://github.com/nlohmann/json

[9] Stroika: https://github.com/SophistSolutions/Stroika

[10] concurrencpp: https://github.com/David-Haim/concurrencpp

[11] awesome-hpp: https://github.com/p-ranav/awesome-hpp

[12] Ускорение сборки C и C++ проектов: https://pvs-studio.com/ru/blog/posts/cpp/0549/

[13] лекцию: https://youtu.be/_2LA8H7QcXQ

[14] старые: https://stackoverflow.com/questions/373142/what-techniques-can-be-used-to-speed-up-c-compilation-times

[15] новые: https://www.reddit.com/r/cpp/comments/hj66pd/c_is_too_slow_to_compile_can_you_share_all_your/

[16] C++ Core Guidelines: https://github.com/isocpp/CppCoreGuidelines

[17] Collaborative Collection of C++ Best Practices: https://github.com/cpp-best-practices/cppbestpractices

[18] C++ Weakly: https://www.youtube.com/channel/UCxHAlbZQNFU2LgEtiqd2Maw

[19] Google C++ Style Guide: https://google.github.io/styleguide/cppguide.html

[20] AddressSanitizer: https://github.com/google/sanitizers/wiki/AddressSanitizer

[21] LeakSanitizer: https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer

[22] ThreadSanitizer: https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual

[23] MemorySanitizer: https://github.com/google/sanitizers/wiki/MemorySanitizer

[24] HWASAN: https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html

[25] UBSan: https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html

[26] мощный статический анализатор кода: https://pvs-studio.com/ru/blog/posts/0908/

[27] C++ Best Practices (2019): https://rigtorp.se/cpp-best-practices/

[28] Главный вопрос программирования, рефакторинга и всего такого: https://pvs-studio.com/ru/blog/posts/cpp/0391/

[29] C++ Coding Standards: 101 Rules, Guidelines, and Best Practices: http://micro-os-plus.github.io/develop/sutter-101/

[30] Источник: https://habr.com/ru/post/708138/?utm_source=habrahabr&utm_medium=rss&utm_campaign=708138