Практикующие разработчики на C++ из ведущих компаний поделятся своими знаниями, представят прикладные доклады и расскажут о реальных кейсах, подкреплённых метриками.
Конференция пройдёт в двух странах и трёх городах: офлайн и онлайн в Москве и Белграде, а в Санкт‑Петербурге будет только офлайн‑программа с активностями.
Современные тулчейны предлагают множество средств для поиска ошибок на фазе QA (различные санитайзеры, фаззинг, property-based-тестирование и т. п.). Но для критического программного обеспечения защита от UB требуется и в проде. Такая защита (т. н. hardening) должна быть достаточно полной, чтобы предотвращать наиболее частые уязвимости, и достаточно дешёвой, чтобы не влиять заметно на производительность. В докладе расскажем о средствах hardening, предоставляемых современными тулчейнами (ASLR, проверки Glibc и STL и т. д.), и их влиянии на развитие языка C++.
Как C++ проекты подключали внешние библиотеки раньше — и как делают это сейчас. Разберём системные зависимости через pkg-config, магию find_package () в CMake и директиву dependency () в Meson. Посмотрим, как conan и vcpkg меняют подход к сборке, и заглянем в будущее: CPS как новый стандарт для кросс-языковых зависимостей.
Recently, lightweight threads have gained significant popularity in C++, with libraries such as Userver, Argobots, and Boost:fibers leading the way. However, using traditional concurrency primitives like mutexes or locks with these lightweight threads can pose challenges.
For instance, consider a scenario involving a lock that employs active waiting techniques, such as a test-and-set lock. When a thread yields and suspends while in a critical section, all currently active lightweight threads can attempt to acquire the lock without suspending themselves. This behavior can result in deadlock, as the active threads will never be able to acquire the lock since the suspended thread cannot release it.
Due to these challenges, existing lock implementations need to be updated to function correctly in environments with lightweight threads. In this talk, we will explore various approaches to transforming state-of-the-art locks. These new implementations will support all libraries that utilize lightweight threading capabilities and provide a specific interface. To demonstrate the versatility of our approach, we will present experiments using three lightweight thread libraries: Userver, Argobots, and Boost:fibers.
В последнее время лёгкие потоки приобрели значительную популярность в C++. Их реализации представлены во множестве библиотек. Выделяющимся представителями можно считать такие проекты, как Userver, Argobots и Boost: fibers. Однако использование традиционных примитивов параллелизма, таких как мьютексы или блокировки, с этим видом потоков может создавать проблемы.
Рассмотрим сценарий работы простой реализации мьютекса, использующей активное ожидание, например, Test-And-Set. Поток, завладевший такой блокировкой, может приостановиться и передать управление планировщику, находясь в критической секции. При этом все активные в данный момент лёгкие потоки могут попытаться получить блокировку, не приостанавливая себя. В результате, такое поведение может привести к взаимной блокировке, поскольку активные потоки никогда не смогут получить блокировку, а приостановленный поток не сможет её освободить.
Из-за описанных проблем существующие реализации блокировок необходимо обновить для корректной работы в средах с лёгкими потоками. В этом докладе мы рассмотрим различные подходы к преобразованию современных блокировок. Покажем как удалось реализовать общий интерфейс, позволяющий использовать одни и те же примитивы совместно с различными библиотеками лёгких потоков. Чтобы продемонстрировать универсальность нашего подхода, мы представим эксперименты с использованием трёх библиотек: Userver, Argobots и Boost: fibers.
Поговорим о том, с какими проблемами разработчики сталкиваются, когда пишут конкурентные структуры данных и как значительно облегчить боль от проверки и отладки конкурентного кода. Представим инструмент, используемый в команде баз данных VK, для проверки конкурентного кода и расскажем, какие идеи и алгоритмы позволяют ему работать.
Председатель Российской рабочей группы по стандартизации С++. Разрабатывает и поддерживает стандартную библиотеку GCC, библиотеки Boost. Автор Boost-библиотек PFR, TypeIndex, DLL, StackTrace и активный maintainer Any, Conversion, LexicalCast, Variant.
Автор книги Boost C++ Application Development Cookbook.
Любит C++, большие ациклические графы и прятать мьютексы от бизнес-логики в многопоточном коде.
Строит сообщества, организовывает мероприятия и работает со спикерами.