Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов из мира C++ за последние две недели.
Приятного чтения!
⚡️️ Новости и релизы
Dear ImGui 1.89.9 — Сентябрьский патч-релиз, содержащий небольшие изменения и багфиксы.
Conan 1.61.0 — Добавление поддеркжи SCons и Xcode 15.
Conan 2.0.11 — Улучшение поддеркжи Meson и clang-cl, исправлениие регрессий и крашей.
CppCheck 2.12.0 — Добавление нескольких новых и улучшение уже существующих проверок.
Godot XR September 2023 — Добавление поддержки macOS OpenXR, нескольких новых шлемов: Tilt Five, PICO.
Ogre 14.1.0 — Добавление поддержки прямоугольных источников света и улучшение теней: теперь в их формировании может участвовать несколько светильников, а не только один.
? Статьи
?? Habr: Собираем и запускаем калькулятор из Windows XP в среде Windows 10 c помощью GCC x64.
?? Habr: Создаем проект STM32 C++ FreeRTOS в VS Code для очень маленьких — Гайд, как подружить FreeRTOS, VS Code и C++.
Andreas Fertig: Control your numbers in C++ — Обзор нововведения C++14, позволяющего использовать сепаратор в целочисленных литералах:
char buffer[2'048]{}; const auto someConstant = 2'00'00'00; const auto anotherConstant = 0xFF'256'AF;
Andreas Fertig: C++20 Dynamic Allocations at Compile Time — C++20 дал нам возможность выделять динамическую память в compile-time: как это работает, и какие у нее ограничения?
Arthur O'Dwyer: Just how constexpr is C++20’s std::string? — О том, какие ограничения имеет использование
std::string
иstd::vector
в контексте времени компиляции.Rainer Grimm: C++23: Four new Associative Containers — Обзор четырёх новых ассоциативных контейнеров, появившихся в C++23:
std::flat_map
,std::flat_set
,std::flat_multimap
, andstd::flat_multiset
. И том, когда их использование оправдано, а когда лучше использовать «классические» контейнеры.Rainer Grimm: C++23: A Multidimensional View — Обзор одного из нововведений C++23, очень гибкого и кастомизируемого многомерного аналога
std::span
.Marius Bancila: Formatting Text in C++: The Old and The New Ways — Обзор различных способов форматирования текста в C++, сравнение их производительности: I/O streams, семейство printf функций, std::format, libfmt.
Sandor Dargo: C++23: some changes related to templates — Обзор нововведений C++23, благодаря которым стала возможна реализация deducing this: std::forward_like, вывод типов для унаследованных конструкторов.
Sandor Dargo: Constexpr functions for smaller binary size? — constexpr: вред или польза для размеров бинарников?
Julien Jorge: Weight Gain and Perf Loss — Захватывающая детективная история об одной include-директиве, загадочным образом увеличивавшей на 5% производительность всей программы и вместе с тем уменьшавшей ее размер.
Daneil Lermire: Locating ‘identifiers’ quickly (ARM NEON edition) — Ускорение алгоритма поиска идентификаторов в строке более чем в 30 раз с помощью инструкций ARM NEON.
? Видео и доклады
Jason Turner: C++ Weekly - Ep 392 - Google's Bloaty McBloatface — обзор Bloaty McBloatface, профилировщика размера для бинарных файлов, поддерживающего WebAssembly, ELF (Linux), Mach-O (MacOS) и PE/COFF (Windows).
Jason Turner: C++ Weekly - Ep 393 - C++23's std::unreachable — Обзор нововведения C++23, позволяющего программисту, недовольного недостаточным количеством неопределенного поведения в своей программе, вызвать его самостоятельно и том, зачем это иногда бывает нужно.
C++ Now 2023
Daisy Hollman, Kris Jusiak: Adapting C++20 Ranges Algorithms for Most Metaprogramming Needs in Fewer Than 1,000 Lines of Code — О нововведениях C++20, делающих метапрограммирование более доступным, и компромиссам между ним, кодогенерацией и дублированием.
Robert Seacord: Integer Type Selection in C++: in Safe, Secure and Correct Code — Гайд по выбору правильных целочисленных типов во имя красивых, удобных и безопасных интерфейсов.
John McCall: Introducing a Memory-Safe Successor Language in Large C++ Code Bases — О максимально безболезненном интегрировании Swift в большие плюсовые кодовые базы и том, почему именно этот язык лучше всех остальных подходит для написания критичного кода, где ошибки, связанные с неправильным управлением памятью, недопустимы.
David Sankel: Assembly, System Calls, and Hardware in C++ — Погружение в низкоуровневые аспекты, лежащие в основе всех наших программ: системные вызовы, соглашения о вызовах, атомарные вычисления и не только.
Chandler Carruth: Carbon Language Successor Strategy: From C++ Interop to Memory Safety — Взгляд на путь, который Carbon предоставит для постепенного и масштабируемого обеспечения безопасности существующих плюсовых кодовых баз.
Tony Van Eerd: Value Oriented Programming Part 1: You Say You Want to Write a Function — Гайд по написанию функций в value-ориентированном стиле.
Andrei Zissu: Lightning Talk: A Journey Back In Time - C++ Evolution
Christopher Fretz: Lightning Talk: How Hard Can it be to SFINAE in C++03?
Ben Deane: Lightning Talk: Global API Injection in C++
Richárd Szalay: Lightweight Wrappers for Conscious std::transform_reduce Operation Safety
Stockholm C++ 0x29
Paul Dreik: Using variable templates on a tiny problem — О том, как шаблонные переменные, представленные в C++14, способны повысить удобочитаемость вашего кода.
Karl Åkerblom: A quick look at Tracy Profiler — Краткий обзор инструментального профилировщика Tracy; рассмотрение нюансов работы с ним.
?️Подкасты
CppCast: Episode 369, AI and Random Numbers — О различиях между ИИ на основе LLM и более статистических подходах, а также месте случайных чисел во всем этом и ограничениях их текущей поддержки в C++.
Дайджест составлен и опубликован при поддержке московского сообщества программистов C++ Moscow
Заметили ошибку или опечатку? Сообщите в личку (telegram, habr)
Прислать ссылку можно через форму или просто написав мне в личные сообщения (telegram, habr)
← Предыдущий выпуск: C++ Дайджест №2