Потрясающий современный C++
Коллекция ресурсов по современному C++.
Цель — собрать список ресурсов, которые помогут людям узнать и использовать современный C++11 и последующие версии.
Содействие
Чтобы добавить, удалить или изменить что-то в списке: отправьте запрос на включение в репозиторий GitHub.
Книги
- Экскурсия по C++ (Бьерн Страуструп) [C++17.11.20]
- Язык программирования C++ (Бьерн Страуструп) [C++11]
- Эффективный современный C++ (Скотт Мейерс) [C++11/14]
- Обзор нового C++ (Скотт Мейерс) [C++11/14]
- Основные рекомендации по C++ (Бьерн Страуструп, Херб Саттер) [C++14.11.17] — Рекомендации по использованию современного C++.
- C++ Concurrency в действии (Энтони Уильямс) [C++14.11.17] — Справочник и руководство по написанию многопоточного кода на стандартном C++.
- C++17 — Полное руководство (Николай М. Джосуттис) [C++17] — Руководство по использованию языковых и библиотечных функций C++17.
- Professional CMake (Крейг Скотт) — практическое руководство по использованию CMake для создания проектов на C++.
- Учебное пособие по современному C++: C++ 14.11.17.20 «На лету» (Changkun Ou) — Книга претендует на звание «На лету». Его цель — предоставить всестороннее введение в соответствующие функции современного C++ (до 2020-х годов).
Подробное руководство по книгам по C++ см. в «Полном руководстве и списке книг по C++» на Stackoverflow.
Сообщество
Найдите последние новости и обновления C++:
- Новости, статус и обсуждение стандарта C++.
Слушайте последние подкасты по C++:
- CppCast (YouTube, Twitter) — первый подкаст разработчиков C++ для разработчиков C++!
- Cpp.chat (YouTube, Twitter) — Комментарии по C++ и вопросам, интересующим программистов C++.
- C++ Weekly — обучающие видеоролики Джейсона Тернера.
Прочтите последние предложения по стандарту C++:
- Документы комитета по стандартам C++.
Обсудите все, что связано с C++:
- r/cpp — субреддит C++.
- C++ Slack — рабочая область C++ Slack.
- Telegram-группа CoreHard.
Задайте свои вопросы по C++:
- r/cpp_questions — субреддит для вопросов и ответов по C++.
- Stackoverflow C++/C++11/C++14/C++17/C++20 — вопросы Stackoverflow о C++.
Возможно, на ваш вопрос уже был ответ в FAQ?:
- Супер-часто задаваемые вопросы по C++.
- Часто задаваемые вопросы по C++11.
Посетите одну из многочисленных конференций по C++:
- Список предстоящих и прошедших конференций по C++.
Найдите группы пользователей C++:
- Встреча со списком групп пользователей C++.
- Список групп пользователей в C++ Super-FAQ.
- Встречи по C/C++.
- Найдите каналы, начинающиеся с
#ug
в C++ Slack.
Переговоры
TODO курирует список хороших докладов о том, как упростить код с помощью функций C++11/17/20
Начните с образовательных и рекомендуемых видеороликов SG20 для преподавания C++.
- CppCon Talks — доклады с конференции C++.
- CppCon 2014: Бьерн Страуструп «Сделайте простые задачи простыми!»
- CppCon 2014: Херб Саттер «Программирование без блокировок (или жонглирование лезвиями), часть I»
- CppCon 2014: Херб Саттер «Программирование без блокировок (или жонглирование лезвиями), часть II»
- CppCon 2014: Скотт Мейерс «Вычет типа и почему вас это волнует»
- CppCon 2015: Бьерн Страуструп «Хорошее написание C++14»
- CppCon 2015: Херб Саттер «Написание хорошего C++14... по умолчанию»
- CppCon 2016: Чендлер Каррут «Мусор на входе, мусор на выходе: споры о неопределенном поведении…»
- CppCon 2016: Херб Саттер «Свобода от утечек в C++… по умолчанию».
- CppCon 2017: Джейсон Тернер «Практический C++17»
- CppCon 2018: Джонатан Боккара «105 алгоритмов STL менее чем за час»
- конференция code::dive 2014 – Скотт Мейерс: Кэш процессора и почему вас это волнует (слайды)
- code::dive Conference 2015 - Андрей Александреску - Написание быстрого кода I (слайды)
- code::dive Conference 2015 - Андрей Александреску - Написание быстрого кода II (слайды)
- C++Now Talks — доклады с конференции C++Now.
- Going Native 2012: шаблоны Variadic — это Funadic
- Going Native 2013: Стефан Т. Лавей - «Не помогайте компилятору»
- Going Native 2013: Шон Пэрент — «Приправа C++»
Блоги
- Блог Анджея C++ — Рекомендации и мысли о C++.
- Блог Энтони Уильямса
- В академических кругах — Джон Регер, профессор компьютерных наук, Университет Юты, США.
- Эрик Ниблер
- Свободное владение C++ — выразительный код на C++.
- Гуру недели (новые публикации) — регулярная серия задач по программированию на C++, созданная и написанная Хербом Саттером.
- Гуру недели (старые публикации) — старые публикации Гуру недели.
- Размышления Маршалла о C++
- Блог Пола Фульца II
- Прешинг по программированию
- Упростите C++. Пишите понятный и удобный в сопровождении C++.
- Sticky Bits — блог, посвященный разработке программного обеспечения для систем реального времени и встраиваемых систем.
- Sutter's Mill - Херб Саттер о разработке программного обеспечения.
- Взгляд со стороны Аристеи - Профессиональная деятельность и интересы Скотта Мейерса.
- Блог группы Visual C++
- Почему ворон похож на письменный стол?
Веб-сайты
- Лучшие практики C++ — совместный сборник лучших практик C++.
- Шаблоны C++ — хранилище современных шаблонов C++.
- Справочник по C++ — справочник по C++.
- C++ на примерах — Изучите C++ на примерах!
Начальные шаблоны проектов
- ModernCppStarter — шаблон для запуска современных проектов C++ с использованием CMake, CI, покрытия кода, формата clang, воспроизводимого управления зависимостями и многого другого.
- Modern-cpp-template — шаблон для современных проектов C++, использующих CMake, Clang-Format, CI, модульное тестирование и многое другое, с поддержкой последующего включения.
- cmake_template — шаблон проекта CMake, который поможет вам начать работу с C++ и инструментами.
- Pitchfork — Pitchfork — это набор соглашений по проектам C++.
Библиотеки
Это не полный список всех библиотек C и C++. Это список высококачественных современных библиотек общего применения (сериализация, база данных, тестирование и т. д.) или высококачественных библиотек с новым использованием новых функций C++.
Кухонная мойка/Каркас
- abseil — Abseil — это коллекция кода C++ с открытым исходным кодом (совместимая с C++11), предназначенная для расширения стандартной библиотеки C++.
- Boost — Коллекция библиотек C++.
- Folly — библиотека с открытым исходным кодом Facebook.
- POCO — Библиотеки POCO C++ — это мощные кроссплатформенные библиотеки C++ для создания сетевых и интернет-приложений, которые работают на настольных, серверных, мобильных, IoT и встроенных системах.
- nonstd-lite — родительский элемент репозиториев *-lite, путь перехода к функциям пост-C++11 для сред до C++11.
- xtd — современная платформа C++17/20 для создания консольных (CLI), форм (GUI, таких как WinForms) и тунит-приложений (модульные тесты, такие как Microsoft Unit Testing Framework) в Windows, macOS, Linux, iOS и Android.
Тестирование
- Одобрительные тесты для C++ — встроенные ApprovalTests для C++ в Linux, Mac и Windows.
- autocheck — клоны QuickCheck и SmallCheck для C++.
- Bandit — платформа только для заголовков для C++11, которая хочет сделать работу с модульными тестами приятной.
- Boost:UT — среда C++20 μ(micro)/Unit Testing, с одним заголовком, без необходимости использования макросов.
- Boost.Test — среда тестирования Boost.
- Catch — современная C++-родная платформа только для заголовков для модульных тестов, TDD и BDD.
- clean-test — современная среда тестирования C++-20.
- doctest — самая быстрая многофункциональная среда тестирования с одним заголовком C++11/14/17/20 для модульных тестов и TDD.
- Fakeit — издевательство над C++ стало проще. Простая, но очень выразительная библиотека только заголовков для насмешек на C++.
- Googletest — Google Testing and Mocking Framework.
- Mull — Практический инструмент тестирования мутаций для C и C++.
- Rapidcheck — клон QuickCheck для C++.
- snitch — облегченная среда тестирования C++20.
Бенчмаркинг
Библиотеки и фреймворки для создания микро-бенчмарков.
- Celero — библиотека/фреймворк для создания эталонных тестов C++.
- Google Бенчмарк? - Библиотека поддержки микробенчмарков.
- hayai — среда сравнительного тестирования C++.
- Nonius — среда микротестирования C++. Библиотека/фреймворк разработки тестов C++.
- nanobench — простая, быстрая и точная функция микробенчмаркинга с одним заголовком для C++ 11/14/17/20.
Ведение журнала
- fmtlog — библиотека журналирования в стиле fmtlib с задержкой в наносекундах.
- spdlog — быстрая библиотека журналирования C++.
- loguru — легкая и гибкая библиотека журналирования C++.
Резьба
- concurrentqueue — быстрая параллельная очередь без блокировок для нескольких производителей и нескольких потребителей для C++11.
- Cpp-Taskflow — современная библиотека программирования параллельных задач на C++
- Соединение — параллельные структуры данных в C++.
- MPMCQueue — ограниченная очередь без блокировок с несколькими производителями и потребителями, написанная на C++11.
- SPSCQueue — ограниченная очередь без ожидания и блокировки с одним производителем и одним потребителем, написанная на C++11.
- Строительные блоки потоковой обработки (TBB) — это библиотека шаблонов C++, разработанная Intel для параллельного программирования на многоядерных процессорах. Используя TBB, вычисления разбиваются на задачи, которые могут выполняться параллельно. Библиотека управляет и планирует потоки для выполнения этих задач.
- execq — интеллектуальная очередь, которая выполняет задачи в виде пула потоков (последовательный/параллельный) в C++11.
- concurrencpp — общая библиотека параллелизма, содержащая задачи, исполнители, таймеры и сопрограммы C++20 для управления ими всеми.
Парсинг и сериализация
- json? - JSON для современного C++.
- jsoncpp — библиотека C++ для взаимодействия с JSON.
- toml++ — библиотека C++17 только для заголовков для анализа TOML v0.5.0 и более поздних версий.
- tinytoml — библиотека C++11 только для заголовков для анализа TOML.
- yaml-cpp — анализатор и генератор YAML на C++.
- cpptoml — библиотека только для заголовков для анализа файлов конфигурации TOML.
- зерновые — библиотека C++11 для сериализации.
- cista — библиотека C++17 для высокопроизводительной двоичной сериализации без копирования.
- simdjson — ускоряет анализ JSON как такового, используя общедоступные инструкции SIMD.
- Boost.JSON — библиотека JSON с надежной поддержкой пользовательских распределителей.
- hjson-cpp — библиотека C++11 для чтения и записи файлов Hjson и/или JSON.
- json_struct — Высокопроизводительный анализатор JSON с одним заголовком, анализирующий непосредственно структуры C++ и обратно.
- daw_json_link — Быстрая и удобная сериализация и анализ JSON на C++.
Форматирование строк и шаблоны
- {fmt} — небольшая, безопасная и быстрая библиотека форматирования.
- Inja — шаблонизатор для современного C++.
- Mustache — текстовые шаблоны Mustache на C++11.
- tinyformat.h — минимальная типобезопасная библиотека замены printf для C++.
- pprint — симпатичный принтер для современного C++.
Сценарии
- sol2 — привязка библиотеки C++ к Lua.
- ChaiScript — простой в использовании встроенный язык сценариев для C++.
- pybind11 — бесшовная работа между C++11 и Python.
Веб/HTTP
- Beast — HTTP и WebSocket, созданные на основе Boost.Asio в C++11.
- cpprestsdk — C++ REST SDK — это проект Microsoft для облачного взаимодействия клиент-сервер в собственном коде с использованием современного асинхронного API C++. Цель этого проекта — помочь разработчикам C++ подключаться к сервисам и взаимодействовать с ними.
- cpr — запросы C++: Curl for People, духовный порт запросов Python.
- Crow — быстрая и простая в использовании микроплатформа для создания веб-серверов (вдохновленная Python Flask).
- dmbcs-micro-server — JSON, HTML, текст и PNG на основе C++20 через HTTP; простой способ встроить сервер в ваше приложение для предоставления веб-интерфейса.
- Drogon — высокопроизводительная среда HTTP-приложений на базе C++14/17.
- oat++ — высокопроизводительная веб-платформа (C++11, нулевая зависимость).
- pistache — элегантная среда REST C++.
- restbed — платформа Restbed обеспечивает асинхронную функциональность RESTful в приложениях C++11.
База данных
- mongo-cxx-driver — драйвер C++ для MongoDB.
- redox — современный, асинхронный и невероятно быстрый клиент C++11 для Redis.
- sqlite_orm — мощная библиотека ORM SQLite3 только для заголовков для C++14.
- sqlite3pp — C++-оболочка API SQLite3.
- sqlpp11 — типобезопасная библиотека шаблонов SQL для C++.
- libpqxx — официальный клиентский API C++ для PostgreSQL.
- TinyORM — современная библиотека ORM C++.
БиоС++
- SeqAn — современная библиотека C++ для анализа последовательностей (C++17, C++20).
Разное
- ASAP — библиотека только для заголовков для анализа, отображения, работы и итерации дат.
- BigIntegerCPP — большая целочисленная библиотека C++11 с эффективной высокой производительностью, упрощенная по своей природе и понятная на первый взгляд.
- CAF — реализация модели актера с открытым исходным кодом на C++.
- Cinder — Cinder — бесплатная библиотека с открытым исходным кодом для профессионального творческого программирования на C++.
- Conduit — высокопроизводительные потоки на основе Coroutine TS.
- cppitertools — реализация itertools (python) для C++14
- cxxopts — облегченный анализатор параметров командной строки C++.
- date — библиотека даты и времени, основанная на заголовке C++11/14/17.
- docopt.cpp — docopt создает красивые интерфейсы командной строки.
- EnTT — быстрая и надежная система объектно-компонентных систем (ECS) только для заголовков для современного C++.
- Font Chef — библиотека C99 и C++14 для подготовки шрифтов и рендеринга текста.
- HashLibPlus — библиотека C++11, предоставляющая простой в использовании интерфейс для вычисления хэшей и контрольных сумм строк, файлов, потоков, байтовых массивов и нетипизированных данных, и это лишь некоторые из них. Он также поддерживает инкрементное хеширование.
- IntX — порт C++11 библиотеки целых чисел произвольной точности IntX со скоростью, обеспечивающий реализацию алгоритмов умножения/деления O(N * log N).
- iod — утилиты метапрограммирования для C++14.
- Magic Enum — статическое отражение перечислений (в строку, из строки, итерация) для современного C++, работает с любым типом перечисления без какого-либо макроса или шаблонного кода.
- Wise Enum — статическое отражение перечислений, похожее на Magic Enum, но работает с C++ 14.11.17.
- Nameof — библиотека C++17, предназначенная только для заголовков, предоставляет макросы и функции nameof для получения простого имени переменной, типа, функции, макроса и перечисления.
- PEGTL — библиотека шаблонов грамматик синтаксического анализа выражений (C++11, только заголовок).
- Случайный — простой и удобный случайный случайный заголовок только для современного C++.
- rang — простая, современная библиотека C++11, предназначенная только для заголовков, для цветов в вашем терминале.
- range-v3 — экспериментальная библиотека диапазонов для C++ 14.11.17.
- SimpleBaseLib4CPP — простая библиотека базового кодирования C++11, которая на данный момент обеспечивает поддержку кодирования и декодирования различных баз, таких как Base16, Base32 (различные варианты), Base58 (различные варианты), Base64 (различные варианты). [МИТ]
- simple_match — сопоставление шаблонов только с простым заголовком для C++14.
- SRL-CPP — библиотека для создания простых регулярных выражений, написанная на C++11, которая обеспечивает простой в использовании интерфейс для создания как простых, так и сложных выражений регулярных выражений. [МИТ]
- tweeny — библиотека интерполяции только для заголовков с более чем 30 функциями смягчения.
- Vireo — легкая и универсальная библиотека обработки видео от Twitter.
- индикаторы - Индикаторы активности для современного C++.
- AssociatedEnum — библиотека C++ только для заголовков для перечислений со связанными значениями.
- openFrameworks — набор инструментов C++ с открытым исходным кодом для творческого кодирования.
- tabulate — создатель таблиц для современного C++.
Инструменты
Разное
- clang-формат? — Инструмент для форматирования кода C++.
- clangd — понимает ваш код C++ и добавляет в ваш редактор интеллектуальные функции: завершение кода, ошибки компиляции, переход к определению и многое другое.
- Compiler Explorer — интерактивное исследование выходных данных сборки вашего кода C++.
- cquery — языковой сервер C/C++, поддерживающий многомиллионную кодовую базу, работающий на базе libclang. Emacs, Vim, VSCode и другие с поддержкой протокола языкового сервера. Перекрестные ссылки, завершение, диагностика, семантическая подсветка и многое другое (коммитов больше нет с 27 ноября 2018 г.)
- ccls — языковой сервер C/C++/ObjC, поддерживающий перекрестные ссылки, иерархии, завершение и семантическую подсветку, ответвленный от cquery, который находится в активной разработке.
- Irony-mode — второстепенный режим AC/C++ для Emacs на базе libclang.
- Modern-cpp-font-lock-mode — поддержка подсветки синтаксиса для современного C++ с помощью emacs
Динамический анализ
- дезинфицирующие средства? - Этот проект является домом для дезинфицирующих средств: AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer и других.
- Valgrind — это инструментальная платформа для создания инструментов динамического анализа. Существуют инструменты Valgrind, которые могут автоматически обнаруживать многие ошибки управления памятью и многопоточностью, а также подробно профилировать ваши программы. Вы также можете использовать Valgrind для создания новых инструментов.
Статический анализ
- cppcheck — инструмент статического анализа кода C/C++. Он обеспечивает уникальный анализ кода для обнаружения ошибок и фокусируется на обнаружении неопределенного поведения и опасных конструкций кода.
- лязг-аккуратно? — это инструмент «линтер» C++ на основе clang. Его цель — предоставить расширяемую основу для диагностики и исправления типичных ошибок программирования, таких как нарушения стиля, неправильное использование интерфейса или ошибки, которые можно выявить с помощью статического анализа. clang-tidy является модульным и предоставляет удобный интерфейс для написания новых проверок.
- clang-analyzer — инструмент анализа исходного кода, который находит ошибки в программах C, C++ и Objective-C. Он реализует межпроцедурный анализ с учетом пути, основанный на технике символьного выполнения.
Фаззинг
- Американский нечеткий цикл. Американский нечеткий цикл — это фаззер, ориентированный на безопасность.
- hongfuzz — ориентированный на безопасность, управляемый обратной связью, эволюционный, простой в использовании фаззер с интересными возможностями анализа.
- libFuzzer — библиотека для фазз-тестирования на основе покрытия.
Система сборки
- Bazel — это быстрая, масштабируемая, многоязычная и расширяемая система сборки.
- build2 — это кроссплатформенный набор инструментов для разработки и упаковки кода C и C++.
- CMake ? - Кроссплатформенное семейство инструментов, предназначенных для сборки, тестирования и упаковки программного обеспечения.
- Meson — это система сборки с открытым исходным кодом, призванная быть чрезвычайно быстрой и, что еще более важно, максимально удобной для пользователя.
- XMake — это кроссплатформенная утилита сборки, основанная на Lua.
Управление пакетами
- Buckaroo — полностью децентрализованный менеджер пакетов Polyglot для C++ и его друзей
- cget — получение пакета CMake.
- conan — менеджер пакетов C/C++.
- CPM — сценарий CMake для не требующего установки межплатформенного управления зависимостями.
- Hunter — кроссплатформенный менеджер пакетов для C++.
- vcpkg — менеджер библиотек C++ для Windows, Linux и MacOS
- xrepo — кроссплатформенный менеджер пакетов C/C++, основанный на Xmake.
О
Этот список был составлен Эриком Ригторпом при помощи сообщества C++:
- rigtorp.se
- [email protected]
- github.com/rigtorp
- twitter.com/rigtorp
- linkedin.com/in/rigtorp