Профиль: Аноним (вход | регистрация) неRU opennet.me  
OpenNET

[ новости /+++ | форум | теги |    ]

Релиз набора компиляторов LLVM 23

27.08.2026 21:42 (MSK)

После шести месяцев разработки представлен релиз проекта LLVM 23.1.0, развивающего инструментарий (компиляторы, оптимизаторы и генераторы кода), компилирующий программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизаций). Сгенерированный псевдокод может быть преобразован в машинный код для заданной целевой платформы или использован JIT-компилятором для формирования машинных инструкций непосредственно во время выполнения программы. На базе технологий LLVM проектом развивается компилятор Clang, поддерживающий языки программирования C, C++ и Objective-C.

Начиная с ветки 18.x проект перешёл на новую схему формирования номеров версий, в соответствии с которой нулевой выпуск ("N.0") используется в процессе разработки, а первая стабильная версия снабжается номером "N.1". Код проекта распространяется под лицензией Apache 2.0.

Среди улучшений в Clang 23:

  • Добавлена поддержка OpenCL C 3.1 (-cl-std=CL3.1).
  • Возможности, связанные с языком С:
    • Реализованы функции циклического битового сдвига stdc_rotate_left_{uc,us,ui,ul,ull} и stdc_rotate_right_{uc,us,ui,ul,ull}, а также функции изменения порядка следования элементов массива в памяти __builtin_stdc_memreverse8, stdc_memreverse8 и stdc_memreverse8u{8,16,32,64}, определённые в заголовочном файле stdbit.h для будущего стандарта C2y.
    • Разрешено обращаться к элементам структур через оператор "." внутри константных выражений (constexpr).
    • В функциях форматирования строк, таких как printf и scanf, реализована поддержка появившихся в стандарте C23 модификаторов размера: "%wN" для типа intN_t, "%wfN" для типа int_fastN_t, "%H" для типа _Decimal32, "%D" для типа _Decimal64 и "%DD" для типа _Decimal128.
  • Возможности, связанные с С++:
    • Во встроенной функции __is_trivially_equality_comparable реализована поддержка сравнения перечислений (enum).
    • Во всех режимах C++ разрешено использование ключевого слова "auto" для автоматического вывода типов параметров функций.
    • Добавлены флаги "-std=c++2d" и "-std=gnu++2d" для тестирования возможностей, развиваемых для стандарта, который выйдет после C++26.
    • Добавлена поддержка дополнительных именованных универсальных escape-символов.
    • Появившаяся в спецификации C++26 возможность использования структурированных привязок (structured binding) в контексте "constexpr" и "constinit" расширена поддержкой кортежеподобных структур (ранее поддерживались массивы и простые структуры).
    • Добавлена частичная поддержка утверждённого в стандарте C++26 оператора "template for" для перебора элементов на этапе компиляции в стиле обычного цикла. При выполнении "template for" тело цикла раскрывается для каждого элемента и каждая итерация обрабатывается в отдельной области видимости, в которой элемент последовательности, по которой итерируется цикл, является константой для каждой итерации и может участвовать в константных выражениях (constexpr). В контексте рефлексии "template for" может применяться для обхода свойств классов или перечислений.
    • Частично реализовано декорирование имён (Itanium mangling, создание уникальных имён символов для компоновщика), используемых для доступа к элементам пакета параметров по индексу.
    • Добавлена поддержка предложенного в стандарте C++20 синтаксиса для более эффективного определения зависимостей между модулями.
    • Арифметические операции с указателями после приведения производных и базовых типов теперь определяются как неопределённое поведение, что позволяет применять оптимизацию на основе девиртуализации вызовов.
    • Разрешено явно специализировать или создавать экземпляры operator() для generic-лямбд.
    • В операторах преобразования типов разрешено не указывать ключевое слово "typename" перед именем шаблона.
    • Разрешено объявлять специализации членов класса в области видимости класса.
    • В структурированных привязках (structured binding) для инициализаторов, возвращающих временные значения (prvalue), задействованы не ссылочные типы.
  • Добавлены встроенные функции __builtin_stdc_rotate_left, __builtin_stdc_rotate_right, __builtin_bitreverseg, __builtin_elementwise_clmul, __builtin_elementwise_pext, __builtin_elementwise_pdep, __builtin_stdc_leading_zeros, __builtin_stdc_leading_ones, __builtin_stdc_trailing_zeros, __builtin_stdc_trailing_ones, __builtin_stdc_first_leading_zero, __builtin_stdc_first_leading_one, __builtin_stdc_first_trailing_zero, __builtin_stdc_first_trailing_one, __builtin_stdc_count_zeros, __builtin_stdc_count_ones, __builtin_stdc_has_single_bit, __builtin_stdc_bit_width, __builtin_stdc_bit_floor, __builtin_stdc_bit_ceil.
  • Добавлены функции stdbit.h, применимые в константных выражениях (constexpr):
    • stdc_leading_zeros_{uc,us,ui,ul,ull}, stdc_leading_ones_{uc,us,ui,ul,ull},
    • stdc_trailing_zeros_{uc,us,ui,ul,ull}, stdc_trailing_ones_{uc,us,ui,ul,ull},
    • stdc_first_leading_zero_{uc,us,ui,ul,ull}, stdc_first_leading_one_{uc,us,ui,ul,ull}, stdc_first_trailing_zero_{uc,us,ui,ul,ull}, stdc_first_trailing_one_{uc,us,ui,ul,ull},
    • stdc_count_zeros_{uc,us,ui,ul,ull}, stdc_count_ones_{uc,us,ui,ul,ull},
    • stdc_has_single_bit_{uc,us,ui,ul,ull},
    • stdc_bit_width_{uc,us,ui,ul,ull}, stdc_bit_floor_{uc,us,ui,ul,ull}, stdc_bit_ceil_{uc,us,ui,ul,ull}.
  • В большинство встроенных функций "__atomic_" добавлена поддержка значений с плавающей запятой и указателей.
  • Добавлен заголовочный файл endian.h, включающий POSIX-функции для манипуляции порядком следования байт.
  • Поддерживаемая версия Unicode обновлена с 15.1 до 18.0.
  • В инструментарий для Linux и Windows добавлена поддержка механизма multilib, включаемого через флаг "-fmultilib-flag" и позволяющего использовать отдельные версии библиотек и заголовочных файлов для разных архитектур.
  • Добавлены новые флаги компилятора:
    • -fms-anonymous-structs / -fno-ms-anonymous-structs - включение/выключение поддержки расширений Microsoft для анонимных структур.
    • --precompile-reduced-bmi - генерация сокращённого BMI (Binary Module Interface) для импортируемого модуля.
    • -fdiagnostics-show-inlining-chain - показ информации об inline-развёртывании при диагностике при помощи атрибутов [[gnu::warning]] и [[gnu::error]].
    • -fcrash-diagnostics-tar - создание tar-архива с файлами для воспроизведения аварийного завершения для упрощения диагностики сбоев в компиляторе.
    • -fwin-cfg-mechanis - выбор режима защиты CFG (Control Flow Guard) для платформы Windows (automatic, dispatch и check).
    • -fstrict-bool - обработка загружаемых из памяти однобайтовых булевых значений только как 0 и 1.
  • Добавлены атрибуты:
    • stack_protector_ignore - выборочное отключение проверки безопасности локальных переменных внутри функции.
    • [[clang::no_outline]] - запрещает оптимизатору разделать код помеченной функции.
    • __attribute__((overflow_behavior)) - определяет поведение (wrap или trap) при переполнении чисел разных типов.
    • __attribute__((__personality__(...))) - назначение функции для раскрутки стека при возникновении исключений.
  • Расширены средства диагностики и статического анализа, добавлены новые проверки (несколько десятков улучшений, связанных с диагностикой).
  • В бэкенд для архитектуры X86 добавлена поддержка процессоров AMD на базе микроархитектуры Zen 6 (-march=znver6). Добавлена поддержка расширения набора команд AVX512BMM и реализованы встроенные функции на его основе.
  • В бэкенд для архитектуры AArch64 добавлена поддержка процессоров Arm AGI CPU (armagicpu), Hisilicon hip12 (hip12) и NVIDIA Rigel (rigel).
  • В бэкенде AMDGPU реализована начальная поддержка GPU GFX1310 на базе архитектуры RDNA 5. Добавлены встроенные функции __builtin_amdgcn_processor_is и __builtin_amdgcn_is_invocable.
  • Улучшены бэкенды для архитектур ARM, RISC-V, LoongArch64, MIPS, SystemZ, WebAssembly и PowerPC.
  • В компоновщике LLD реализовано распараллеливание загрузки входных файлов и маркировки секций для сокращения времени связывания крупных проектов.


  1. Главная ссылка к новости (https://discourse.llvm.org/t/l...)
  2. OpenNews: Релиз набора компиляторов LLVM 22
  3. OpenNews: LLVM ввёл правила применения AI-инструментов. Curl и Node.js ограничат выплаты за уязвимости из-за AI
  4. OpenNews: Представлен бэкенд TPDE-LLVM, работающий в 10-20 раз быстрее LLVM в режиме без оптимизации
  5. OpenNews: В Clang намерены добавить режим усиленной безопасности
  6. OpenNews: Релиз набора компиляторов GCC 16
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/66153-clang
Ключевые слова: clang, llvm
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (50) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Malinovsky (?), 21:57, 27/08/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –16 +/
     

  • 1.4, Аноним (4), 22:53, 27/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > __attribute__((overflow_behavior)) - определяет поведение (wrap или trap) при переполнении чисел разных типов.

    Ну слава тебе господи, дождались наконец, кода таки появилась возможность включать/выключать проверки переполнений не целиком во всем translation unit, а для отдельных типов. Глядишь, скоро так и Turbo Pascal/Ada из 80 догонят.

     
     
  • 2.35, Аноним (35), 09:43, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Здесь должна бы быть картинка "Buff Doge vs Cheems" про программистов, которые могли на K&R написать ВСЁ, и кодеров из 2k2x, страдающих от отсутствия какой-то фичи.
     
     
  • 3.39, Аноним (39), 11:00, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да не вопрос, можно и на ассемблере написать ВСЁ.
     
     
  • 4.51, Аноним (51), 20:46, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Автор(ы) Menuet [64] OS, Kolibry OS, и ещё куча помельче и менее распиренных только одних ОС, или базово-шире: как и авторы книг тип "Ассемблер на линуксе",  шейдеры на ассемблере, компиляторы с внутренним представление на экзотическом ассемблере, автор WinRAR как на VM-ассемблере, и т.п.
    - громко смеются на тобой.
     
     
  • 5.64, Аноним (39), 08:31, 29/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Автор(ы) Menuet [64] OS, Kolibry OS, и ещё куча помельче и менее распиренных только одних ОС

    Вот очень хороший пример: можно, а зачем? Как хобби — конечно, почему бы и нет.

    > авторы книг тип "Ассемблер на линуксе"

    Авторы книг пишут книги, а не софт на ассемблере.

    Остальное вообще не в кассу.

     
     
  • 6.66, MihaNix (ok), 08:29, 31/08/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Стоит отметить, что инструменты вроде NASM кому-то действительно нужны. В том числе и в Linux.
    Однако не стоит писать на asm всё подряд. Использовать его следует только там, где это действительно нужно.
     

  • 1.9, Markx (?), 23:24, 27/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    Это тот самый LLVM, который сходу опрокинул GCC
     
     
  • 2.10, Аноним (10), 00:02, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Это тот, который про... упустил все полимеры.

    Поддержка новых стандартов реализовывается с запозданием. Любят его только корпорации.

     
     
  • 3.14, Аноним (14), 01:02, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Видимо суньор не отличает LLVM от Clang, мда уж
     
     
  • 4.18, Аноним (11), 01:22, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А почему пост озаглавлен LLVM, а 90 процентов про Clang?
     
     
  • 5.56, Markx (?), 22:03, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что LLVM это бэкенд иму как бы пофиг на каком языке ты пишешь главное чтобы байткод нужный ему генерил, а Clang лишь один из его фронтэндов
     
  • 5.57, Markx (?), 22:05, 28/08/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 4.40, Аноним (40), 12:48, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ответ на сообщение о gcc, если что.
     
  • 4.55, Норм (?), 22:00, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Поддержка архинектур в энтом ларже лангуаже виртуал машин то-же ну так скажем, узкая 🫠
     
  • 3.37, Hexen (ok), 10:44, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Какие такие стандарты у LLVM?
     
     
  • 4.41, Аноним (40), 12:49, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Такие например:

    Добавлены флаги "-std=c++2d" и "-std=gnu++2d" для тестирования возможностей, развиваемых для стандарта, который выйдет после C++26.

    Из текста новости.

     
     
  • 5.46, Аноним (4), 17:06, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Такие например:
    > Добавлены флаги "-std=c++2d" и "-std=gnu++2d" для тестирования возможностей, развиваемых для стандарта, который выйдет после C++26.

    Ну, то есть, сабж вам добавляет возможности стандарта, который еще даже не вышел - а вы поете о "поддержка новых стандартов реализовывается с запозданием"? Я все правильно понял?

     
     
  • 6.53, Аноним (53), 20:56, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Как раз думал приставить гдениудь это.

    > статья: * Возможности, связанные с С++:

    И ничего полезного...
    Кто то скажет что вот же кому то долгожданное и заодно совместимость с этим в VS проектах:
    >  Во всех режимах C++ разрешено использование ключевого слова "auto" для автоматического вывода типов параметров функций.

    Я же скажу что, MS этим окончательно угробила С++ на уровне стандарта, по сути саботируя С++ в пользу их C# и прочего.
    И не только это, а то что ознакамливаться с чужим кодом с ленью программерской по имени "auto" - стало в сто раз сложней и дольше.
    Ну и риски багов поднялись на порядок, и ещё на порядок - в чужом или с несколькими разработчиками проекте.
    Т.о.только этитм добавлен ещё один способ "отстрелить себе ногу".
    Саботаж.

     
  • 6.54, Аноним (54), 21:59, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Вопрос был какие. Ответ эти.

    Проблемы не во флагах а в поддержке фич стандартов. В clang очень с ними запаздывают.

     
  • 4.42, Аноним (40), 13:01, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ну или эта цитата из новости:

    Поддерживаемая версия Unicode обновлена с 15.1 до 18.0.

    Получается старый Юникод (версии 15.1) оставался неизменным ровно 5 мажорных версий Clang подряд.

     
     
  • 5.44, Hexen (ok), 16:10, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну или эта цитата из новости:
    > Поддерживаемая версия Unicode обновлена с 15.1 до 18.0.
    > Получается старый Юникод (версии 15.1) оставался неизменным ровно 5 мажорных версий Clang
    > подряд.

    Так это же всё про clang(C\C++), а я про LLVM.

     
     
  • 6.45, Аноним (40), 16:13, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ты в новости другие изменения видишь?
     
  • 5.50, Аноним (50), 18:56, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >>  Поддерживаемая версия Unicode обновлена с 15.1 до 18.0.
    > Получается старый Юникод (версии 15.1) оставался неизменным ровно 5 мажорных версий Clang подряд.

    Стаааарый ... аж 23 года и как без кучки доп. эмоджи и пары тыщ египетских(!) иероглифов жили - совершенно неясно! Ага. Кстати ... какую, говорите, версию юникода поддерживает gcc?


     
     
  • 6.58, Аноним (58), 22:06, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Это был как пример.

    В gcc берут последний существующий. А не забивают несколько версий на существование новых.

    За весь период с версии 15.1 по 18.0 было добавлено 4 316 унифицированных иероглифов CJK

    Это китай, япония и корея.

    Из них 12 критически важных (срочно запрошенных) и 6 критически важных знаков.

    Кроме того, добавлены официальные символы для четырех мировых валют: саудовского риала, мальдивской руфии, оманского риала и дирхама ОАЭ.

     
  • 2.20, Аноним (20), 01:24, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ... и другие влажные мечты Markx.
     
     
  • 3.59, Markx (?), 22:07, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Лол, деды из GCC скрипя шестеренками, поняли крутость идей заложенных в LLVM и препилили GCC в его стиле, но ты походу сильнее заржавел чем бородачи из GNU
     

  • 1.19, Аноним (19), 01:23, 28/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На спор должок и всё такое что поддержит gcc-10 на сборку сверху ещё сотка накидывается
     
  • 1.30, openssh_user (ok), 06:52, 28/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > В компоновщике LLD реализовано распараллеливание загрузки входных файлов и маркировки секций для сокращения времени связывания крупных проектов.

    Это попытка догнать mold по производительности

     
     
  • 2.60, Markx (?), 22:07, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    И правильная попытка, разум возобладал
     

  • 1.31, Аноним (31), 07:49, 28/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Реализованы функции циклического битового сдвига

    Это у них до двадцать третьей версии не было сдвигов?!

     
     
  • 2.34, Аноним (34), 08:49, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Были,но они сейчас решили их зациклить.
     
  • 2.36, Совершенно другой аноним (?), 10:24, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Это у них до двадцать третьей версии не было сдвигов?!
    >> Реализованы функции циклического битового ... для будущего стандарта C2y

    а вообще, кому сильно надо было, пользовались чем-то типа

    ;-----------X8
    static inline uint32_t _rotr(uint32_t src, uint32_t shift)
    {
      return (src >> shift) | (src << (32 - shift));
    }
    ;-----------X8

     
     
  • 3.67, Я (??), 19:43, 31/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    На ассемблере это реализуется, причём одной командой процессора.
     
     
  • 4.68, Совершенно другой аноним (?), 16:44, 01/09/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > На ассемблере это реализуется, причём одной командой процессора.

    к сожалению не для всех процессоров.

    PS: а во многих компиляторах этот шаблон тоже распознаётся самим компилятором и тоже в итоге получается одна команда, если процессор такую команду умеет. Например gcc такое умеет для архитектуры IA32 как минимум с древней версии 4.8, а возможно и раньше.

     

  • 1.38, Hexen (ok), 10:48, 28/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Зашёл прочитать про новые фишки LLVM, а тут насыпали ченджлог clang...
     
     
  • 2.61, Markx (?), 22:11, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Половина новости про поддержку архитектур и допиливание компновщика это как раз LLVM, дороботка компоновщика пожалуй главная фича релиза
     

  • 1.52, Аноним (52), 20:47, 28/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Поддерживаемая версия Unicode обновлена с 15.1 до 18.0.

    Машина времени? Текущая версия Юникода 17.0 принята в сентябре 2025 г.

     
     
  • 2.62, Аноним (62), 23:03, 28/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    https://www.unicode.org/versions/Unicode18.0.0/
     
  • 2.65, Аноним (65), 01:46, 30/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и что вышла новая версия юникода. Продолжали поддерживать работу с 15.1. Сейчас перешли на работу с версией 18.0.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    XSQUARE
    Inferno Solutions
    Hosting by Hoster.ru
    Хоcтинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить новость, Поддержать