Что-то наши публикации всё больше о плохом, чем о хорошем. Здесь баг, тут код с запахом, это антипаттерн, вот так писать не надо. Помогите увидеть светлую сторону программирования на С++. Оставляйте комментарии.
Я увидел на Reddit дискуссию "Good repos for beginners to browse that follow best modern C++ practices (including testing, static analysis etc...)". Обсуждение получилось не очень большое и интересное. И тут я подумал, а не попробовать ли повторить опрос на Хабре, как я поступил с вредными советами.
Кстати, идея с вредными советами развивается. Скоро я планирую выпустить мини-книгу с 60 антисоветами по C++. Подписывайтесь на ежемесячную рассылку у нас на сайте, чтобы не пропустить наиболее интересные публикации.
Итак, тема вредных советов раскрыта :). Время пособирать хорошие практики!
Я начну, а вас приглашаю присоединиться и написать в комментариях:
- какие инструменты вы рекомендуете;
- какие интересные и полезные библиотеки используете;
- какие проекты можно посмотреть с точки зрения обучения;
- посоветуйте практики, стандарты кодирования;
- и так далее.
Стартеры
- ModernCppStarter. Kick-start your C++! A template for modern C++ projects using CMake, CI, code coverage, clang-format, reproducible dependency management and much more.
- gui_starter_template. This is a C++ Best Practices GitHub template for getting up and running with C++ quickly.
Проекты для изучения
Примечание для себя. Если буду потом писать статью по собранной информации, надо проверить эти и другие предложенные проекты с помощью PVS-Studio. А то библиотеки разные бывают... Не хочется что-то потенциально глючное рекомендовать как пример для подражания.
- Diligent Engine. A Modern Cross-Platform Low-Level 3D Graphics Library and Rendering Framework Tweet.
- JSON for Modern C++. Intuitive syntax. Trivial integration. Serious testing. Memory efficiency. Speed.
- 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.
- concurrencpp. Modern concurrency for C++. Tasks, executors, timers and C++20 coroutines to rule them all.
- awesome-hpp. A curated list of awesome header-only C++ libraries.
Ускорение сборки
- Я отсылаю к статье коллеги "Ускорение сборки C и C++ проектов" и его же лекцию на эту тему.
- Есть разные старые и новые дискуссии на эту тему. Жду разного нового интересного на эту тему от читателей. Заранее спасибо.
Стандарты кодирования и рекомендации
- 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.
- Collaborative Collection of C++ Best Practices. This online resource is part of Jason Turner's collection of C++ Best Practices resources. Кстати, раз упомянули Джейсона, стоит ещё оставить ссылочку на его канал C++ Weakly.
- 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.
Динамический анализ кода
- AddressSanitizer для поиска ошибок с памятью.
- LeakSanitizer для поиска утечек памяти.
- ThreadSanitizer для поиска гонки данных и взаимных блокировок.
- MemorySanitizer для поиска использования неинциализированной памяти.
- HWASAN, или Hardware-assisted AddressSanitizer, новый вариант AddressSanitizer, что потребляет меньше памяти.
- UBSan для поиска неопределённых поведений в программе.
Статические анализаторы кода
- Здесь я прикинусь дурачком и вспомню только наш PVS-Studio. А что, очень хороший мощный статический анализатор кода. Используя его, вы сможете находить множество ошибок и потенциальных уязвимостей ещё на этапе написания C++ кода.
- TODO. Прошу читателей делиться собственным успешных опытом использования других статических анализаторов кода.
Книги и другие ссылки
- Я всегда всем рекомендую прочитать книгу "Совершенный код" С. Макконнелла (ISBN 978-5-7502-0064-1).
- C++ Best Practices (2019).
- Главный вопрос программирования, рефакторинга и всего такого.
- C++ Coding Standards: 101 Rules, Guidelines, and Best Practices.
- Скотт Майерс. "Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ" (3-е издание).
- Скотт Майерс. "Эффективный и современный C++. 42 рекомендации по использованию C++11 и C++14".
Ваша очередь
Прошу делиться всем, что, на ваш взгляд, полезно C++ программистам!
Автор: Андрей Карпов