Вышла новая весрия инструментария для разработки - LLVM 23 и Clang 23 — 28 августа 2026 г. в 05:51:29.197
Вышла новая весрия инструментария для разработки - LLVM 23 и Clang 23 Этот крупный релиз является результатом традиционного шестимесячного цикла разработки сообщества. Обновление затрагивает как сам базовый фреймворк LLVM, так и связанные с ним ключевые подпроекты: компилятор Clang, компоновщик LLD, стандартную библиотеку libc++, отладчик LLDB и платформу MLIR. Основные известные изменения и улучшения: * Оптимизатор BOLT: Утилита BOLT (предназначенная для оптимизации бинарных файлов после сборки) получила полноценную поддержку бинарников архитектуры AArch64, использующих технологии безопасности PAC (Pointer Authentication) и BTI (Branch Target Identification). Для BTI утилита теперь умеет самостоятельно корректировать записи PLT и цели косвенных переходов. * Улучшения для Armv9 и профилирования: В BOLT добавлена поддержка компактной модели кода для Armv9 (инструкции FEAT_CMPBR для сравнения и перехода), а также поддержка профилирования оборудования через Arm SPE и аппаратные стеки переходов вроде BRBE. * Изменения в libc++: В стандартной библиотеке C++ продолжилась агрессивная чистка неявных (транзитивных) включений заголовочных файлов во всех языковых режимах. Это существенно ускоряет время сборки проектов, однако может потребовать от разработчиков вручную прописать недостающие #include в коде. Макрос обратной совместимости _LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23, временно облегчавший миграцию, теперь окончательно удален. Кроме того, добавлено диагностирование неиспользуемых объектов контейнеров. * Поддержка WebAssembly: В рамках релиза велась активная интеграция для полноценной поддержки целевой платформы wasm32-wasip3 (Tier 2 в экосистеме Rust компилятора) и кооперативной многопоточности в Wasm-компонентах. Выпуск Clang 23 привнес важные изменения в реализации стандартов C и C++, расширил диагностические возможности и добавил новые флаги компиляции. Основные нововведения: * Частичная поддержка C++26 (-std=c++2c): В Clang 23 реализованы многие новые функции грядущего стандарта. Комитет ISO зафиксировал финальные требования к C++26, и Clang уже начал активную интеграцию его возможностей (включая работу над синтаксисом контрактов, метапрограммированием и первыми элементами рефлексии). * Доработки C++23: На основе ослабленных правил для constexpr-функций в C++23, Clang теперь официально разрешает использовать расширение GNU computed goto (вычисляемые переходы) внутри constexpr. Также доработана поддержка индексации пакетов параметров (pack indexing). * Стабилизация C23: Разработчики завершили полировку поддержки стандарта C23 (бывший C2x). Оптимизирована обработка встроенных бинарных данных через директиву #embed. * Управление вычитанием указателей: Добавлен новый флаг -fdefined-pointer-subtraction. Он сохраняет стабильную, предсказуемую семантику при вычитании указателей, которые ссылаются на абсолютно не связанные между собой объекты (что по умолчанию в C/C++ считается неопределенным поведением). * Инспекция стандартной библиотеки: Появились новые диагностические ключи --print-cxx-stdlib и --print-cxx-stdlib-include-dirs. Они позволяют разработчику наглядно увидеть, какую именно C++ стандартную библиотеку выбрал драйвер компилятора для сборки и какие пути заголовочных файлов были добавлены автоматически. * Расширение для RISC-V: Опции флага очистки регистров при выходе из функций -fzero-call-used-regs (используется для предотвращения утечек данных и эксплойтов) теперь полностью поддерживаются для архитектуры RISC-V. * Строгий контроль времени жизни: Атрибут Атрибут [[clang::noescape]] теперь жестко запрещает освобождать память через аннотированный им параметр (указатель). Пока это ограничение используется анализаторами и предупреждениями для поиска багов с «висячими указателями», но в будущем его планируют задействовать для агрессивной оптимизации LLVM. * Исправление шаблонов классов: Clang теперь корректно переносит атрибуты с шаблонов классов и переменных на их повторные объявления (redeclarations).

