Коллекционирую лучшие 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++ программистам!

Комментарии (6)


  1. x2v0
    28.12.2022 11:19
    +4

    Отличная коллекция для НГ каникул!
    Спасибо :)


  1. khandeliants
    28.12.2022 14:05
    +4

    Рекомендую не обходить стороной YouTube. Там всегда найдется что-то интересное. Например, доклады с конференций, подкасты, обучающие видео. Мой личный список интересных каналов:

    Еще из мыслей – раз статический и динамический упомянули, то не забываем и про unit-тестирование :) Библиотек для этого – вагон и маленькая тележка, но лично приходилось пользоваться этим:


  1. khe404
    28.12.2022 19:25
    +2

    Хотел порекомендовать для обучения библиотеку задачек по программированию.

    https://www.codewars.com/

    Небольшой набор видео о том как писать игры на с++

    https://www.youtube.com/channel/UC-yuWVUplUJZvieEligKBkA


  1. KiddingBanana
    29.12.2022 00:26
    +4

    Могу порекомендовать этот репозиторий:
    https://github.com/JoshuaJakowlew/cppfaq

    Содержит довольно много информации и по мере возможностей обновляется


  1. Albert2009Zi
    29.12.2022 20:43
    +2

    От меня подписка и статью в закладки. Спасибо. И всех с Наступающим ????????????


  1. G0ran
    29.12.2022 21:44
    +1

    Могу порекомендовать репозиторий C++ links, где автор публикует найденные полезные ресурсы по С++ по различным категориям.