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

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

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

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

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

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


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


Стартеры


  1. ModernCppStarter. 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. This is a C++ Best Practices GitHub template for getting up and running with C++ quickly.


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

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


  1. Diligent Engine. A Modern Cross-Platform Low-Level 3D Graphics Library and Rendering Framework Tweet.
  2. JSON for Modern C++. Intuitive syntax. Trivial integration. Serious testing. Memory efficiency. Speed.
  3. Stroika 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. Modern concurrency for C++. Tasks, executors, timers and C++20 coroutines to rule them all.
  5. awesome-hpp. A curated list of awesome header-only C++ libraries.


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


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


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


  1. The C++ Core Guidelines 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. This online resource is part of Jason Turner’s collection of C++ Best Practices resources. Кстати, раз упомянули Джейсона, стоит ещё оставить ссылочку на его канал C++ Weakly.
  3. Google C++ Style Guide. 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 для поиска ошибок с памятью.
  2. LeakSanitizer для поиска утечек памяти.
  3. ThreadSanitizer для поиска гонки данных и взаимных блокировок.
  4. MemorySanitizer для поиска использования неинциализированной памяти.
  5. HWASAN, или Hardware-assisted AddressSanitizer, новый вариант AddressSanitizer, что потребляет меньше памяти.
  6. UBSan для поиска неопределённых поведений в программе.


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


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


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


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


Ваша очередь

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

© Habrahabr.ru