Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов из мира C++ за последние две недели.
Приятного чтения!
⚡️️ Новости и релизы
Boost 1.83.0 — Ряды библиотек Boost пополнились Boost.Compat, «репозиторием реализаций на C++11 стандартных компонентов, добавленных в более поздних стандартах», однако на данный момент включающей реализации лишь
std::latch
иstd::shared_lock
.fmt 10.1.0 — Оптимизация
format_to
иformat_to_n
, увеличивающая производительность на 40-400% в бенчмарке конкатенации строк, другие улучшения и багфиксы.Meson 1.2.1 — Добавление поддержки C++23 и C++26, багфиксы и прочие изменения.
Qt Creator 11.0.2 — Багфиксы.
Visual Studio 2022 17.7 — Добавление инструмента сравнения файлов, более быстрый запуск отладчиков и поиск по файлам, интеграция C++ Build Insights, позволяющего легко отслеживать наиболее «дорогостоящие» инклуды и другое.
MSVC Address Sanitizer – One DLL for all Runtime Configurations — О нововведении Visual Studio 2022 version 17.7 Preview 3, упрощающем конфигурирование и использование MSVC Address Sanitizer.
Introducing CMake Debugger in VS Code: Debug your CMake Scripts using Open-Source CMake Debugger — Главное счастье и радость всех плюсовых разработчиков, пользующихся VS Code, теперь CMake скрипты можно будет так же дебажить, как и весь остальной код: с брейкпойнтами, стеком вызовов и просмотром значений переменных.
???? Статьи
???????? Habr: Правильный if для ускорения работы — О том, как мы можем помочь компилятору оптимизировать блоки
if
, если у нас нет[[likely]]
и[[unlikely]]
из C++20, но зато есть интринсик__builtin_expect
(спойлер: пользователи msvc, у вас его нет).???????? Habr: Seastar как платформа для опорной сети 5G и краткое сравнение с Boost.Asio, userver и другими — Обзор Seastar, сетевого фреймворка с share-nothing архитектурой и lock-free cross-CPU communication, позволяющего из коробки линейно масштабировать производительность по количеству ядер.
???????? Habr: Как написать хороший генератор — Гайд по написанию эффективного и удобного в использовании (даже удобнее, чем
std::generator
из C++23) генератора на корутинах.???????? Habr: Как я вошёл в клуб бага 323 — Перевод статьи о 23-летнем баге №323, объединяющем целые поколения пользователей gcc и clang.
???????? Habr: Первые новинки C++26: итоги летней встречи ISO — Обзор нововведений C++26, только-только принятых в стандарт: Hazard Pointer, Read-Copy-Update, множество доработок по
constexpr
и другое.???????? Habr: Подводные камни C++. Решаем загадки неопределённого поведения, ч. 2 — Продолжение серии статей об UB-проблемах и способах их решения, на этот раз о гонке данных, deadlock, семантике перемещения и use after move.
???????? Habr: Недостатки корутин в C++ — Перевод статьи о рисках, связанных с переносом кодовых баз на использование корутин, потенциально способных привести к уменьшению безопасности и замедлению программы.
Bartlomiej Filipek: Five Advanced Initialization Techniques in C++: From reserve() to piecewise_construct and More — Обзор некоторых техник инициализации, начиная с всем знакомой
reserve()
+emplace_back()
и заканчиваяconstinit
иmake_unique_for_overwrite
, нововведениями C++20.Andrey Upadyshev: A case in optimizing auto-vectorized code — История о том, как проанализировав автоматически векторизованный компилятором код, автор смог улучшить его на 90%, векторизовав его уже вручную.
Sandor Dargo: C++23: multidimensional operator[] — О пользе принятого в C++23 многомерного
operator[]
и том, как с ним наш код изменится.Sandor Dargo: C++23: mdspan — Обзор одного из нововведений C++23, очень гибкого и кастомизируемого многомерного аналога
std::span
.Raymond Chen: Inside STL: The array, Inside STL: The deque, design, Inside STL: The deque, implementation, Inside STL: The unordered_map, unordered_set, unordered_multimap, and unordered_multiset, Inside STL: The map, set, multimap, and multiset — Продолжение серии статей об особенностях реализации контейнеров стандартной библиотеки в libc++, libstdc++ и Microsoft's STL.
Raymond Chen: Inside STL: Smart pointers, Inside STL: The shared_ptr constructor vs make_shared, Inside STL: The shared_ptr constructor and enable_shared_from_this — О фундаментальных особенностях реализации умных указателей, разнице между
std::shared_ptr(new S())
иstd::make_shared<S>()
и том, как работаетstd::enable_shared_from_this
.Raymond Chen: What it means when you convert between different shared_ptrs, Phantom and indulgent shared pointers — О различных способах создания нового
std::shared_ptr
из уже имеющегося, и его пограничных состояниях, phantom и indulgent.Daniel Lemire: Transcoding UTF-8 strings to Latin 1 strings at 18 GB/s using AVX-512 — О том, как даже без excessive cleverness AVX-512 позволяет ускорить трансформации строк, включая нетриваиальные, до 10 раз.
Marius Bancila: How to convert an enum to string in C++ — Пример реализации макроса для преобразования значений перечислений в строки.
Tristan Brindle: Parameter Passing in Flux versus Ranges — Обзор библиотеки flux, замене диапазонов из C++20, и о том, как различается в них подход к передаче параметров в объекты адаптеров.
Arthur O’Dwyer: Some C++20 ranges aren’t const-iterable — Об одной из ловушек, подстерегающей неопытных пользователей C++20 Ranges, невозможности константного итерирования по некоторым из них.
Rainer Grimm: C++23: The Small Pearls in the Core Language — Продолжение серии статей о языковых нововведениях C++23:
auto(x)
иauto{x}
, многомерныйoperator[]
,static operator()
иoperator[]
.
???? Видео и доклады
Jason Turner: Interview with Felix Jones: Game Dev, GBA Homebrew, constexpr and Minecraft — Интервью с Феликсом Джонсом, техлидом Minecraft Bedrock Edition.
Jason Turner: C++ Weekly - Ep 388 - My constexpr Revenge Against Lisp — Обзор cons_expr, constexpr интерпретатора Scheme-подобного скриптового языка.
Jason Turner: C++ Weekly - Ep 389 - Avoiding Pointer Arithmetic — Обзор множества способов, как мы можем изголяться, лишь бы не использовать арифметику указателей, на простейшем примере.
C++ Now 2023
Sean Parent: All the Safeties: Safety in C++
Hana Dusíková: A Graph Based Update System in C++: Lightning Updates
Herb Sutter: Keynote: The Evolution of C++ - A Typescript for C++
Chandler Carruth: Modernizing Compiler Design for Carbon Toolchain
ACCU 2023
Augustin Popa: C++ Package Manager - C++ Dependencies Don't Have To Be Painful!
Rostislav Khlebnikov: Function Contracts in Practice using C++
Anthony Williams: Designing for C++ Concurrency Using Message Passing
????️Подкасты
CppCast: Episode 367, Soagen — О рефлексии, SIMD и soagen, утилите и библиотеке, упрощающей работу с Structure-of-Arrays.
Дайджест составлен и опубликован при поддержке московского сообщества программистов C++ Moscow