Опубликован набор компиляторов LLVM 19

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3181
Зарегистрирован: 20.08.2022

#

Опубликован набор компиляторов LLVM 19
Дата публикации:Tue, 17 Sep 2024 23:08:53 +0300




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




Среди улучшений в Clang 19:
  • Добавлены возможности, определённые в Си-стандарте C23:

    поддержка использования спецификатора constexpr для определения объектов;
    макросы INFINITY, NAN, FLT_NORM_MAX, DBL_NORM_MAX и LDBL_NORM_MAX во float.h;
    механизм "#embed" для интеграции бинарных ресурсов;
    тип char8_t для строк и символов в UTF-8.

Обеспечена реализация всех возможностей, определённых в стандарте C++17. Завершающим звеном стало включение поддержки
элементов для сопоставления параметров шаблона с совместимыми аргументами, которые были отключены по умолчанию из-за имевшихся проблем с совместимостью.

В режиме C++14 включена по умолчанию поддержка функции delete с указанием размера (sized deallocation),

Добавлены возможности, связанные со стандартом C++20: встроенные функции __is_layout_compatible и __is_pointer_interconvertible_base_of; полная поддержка
выражений для импорта модулей; начальная поддержка автоматического определения типов аргументов шаблона класса для создаваемых при помощи шаблонов псевдонимов типов (CTAD для Alias Template).
Добавлены возможности, связанные со стандартом C++20: продление времени жизни временных объектов в циклах, перебирающих диапазоны; переносимые предположения; ослабление ограничений для constexpr и отключение диагностики "-Winvalid-constexpr"; поддержка статических и явных функций-членов объектов с одинаковыми списками параметров.
Добавлены возможности, связанные с будущим стандартом C++2с (C++26): индексирование пакета параметров в шаблонах; синтаксис '= delete("причина")'; атрибуты для структурированных привязок; запрет на привязку возвращаемого glvalue к временному значению; тривиальные бесконечные циклы без неопределенного поведения; вывод ошибки при удалении указателя на неполный тип; применение ограничений в выражениях свёртки ("...").

Добавлены новые флаги компилятора:
  • "-fsanitize=implicit-bitfield-conversion" для проверки неявного усечения и изменения знака при работе с битовыми полями.
    "-fsanitize=implicit-integer-conversion" для проверки неявных преобразований целых чисел.

    "-Wmissing-designated-field-initializers" для выявления отсутствующих инициализаторов полей.
    "-fexperimental-modules-reduced-bmi" для включения урезанного BMI (Binary Module Interface) для именованных модулей C++20, позволяющего использовать стандартные модули C++.
    "-fexperimental-late-parse-attribute" для включения позднего парсинга атрибутов в специфичных контекстах, например, атрибута counted_by.

    "-fseparate-named-sections" для создания отдельных уникальных секций для глобальных символов в именованных специальных секциях.

    "-fms-define-stdc" для совместимости STDC с MSVC.

    "-Wc++23-compat" и "-Wc++2c-compat" - группы предупреждений для упрощения миграции на C++23 и C++26.

    "-fdisable-block-signature-string" для отключения генерации строки с подписью для блоков.


    "-fpointer-tbaa" для пометки несовместимых указателей, используя анализ алиасов на основе типов (TBAA).
Добавлены новые атрибуты: sized_by, counted_by_or_null, nonblocking, nonallocating, blocking, allocating, sized_by_or_null, amdgpu_max_num_work_groups(x, y, z).

Добавлены новые встроенные функции: __builtin_readsteadycounter, __builtin_popcountg, __builtin_clzg, __builtin_ctzg, __is_bitwise_cloneable.


Расширены средства диагностики и статического анализа, добавлены новые проверки.






Основные новшества LLVM 19:
  • В бэкенде для архитектуры RISC-V добавлена экспериментальная поддержка расширений Zabha (атомарные операции с памятью), Ssqosid, Ssnpm, Smnpm, Smmpm, Sspm и Supm (использование масок для указателей), Zba, Zbb, Zbs. Стабилизирована поддержка расширений Ztso, Zabha, Zaamo и Zalrsc.



    В бэкенд для архитектуры AArch64 добавлена поддержка процессоров Cortex-R82AE, Cortex-A78AE, Cortex-A520AE, Cortex-A720AE, Cortex-A725, Cortex-X925, Neoverse-N3, Neoverse-V3 и Neoverse-V3AE.

    В бэкенд для архитектуры ARM добавлена поддержка процессора Cortex-R52+.

    Улучшены бэкенды для архитектур X86, LoongArch, WebAssembly, MIPS, PowerPC и AMDGPU.


    Расширены возможности компоновщика LLD. Добавлены новые виды перемещений (relocations): CREL, GNU_PROPERTY_AARCH64_FEATURE_PAUTH, R_AARCH64_AUTH_ABS64 и R_AARCH64_AUTH_RELATIVE. Добавлен параметр "--compress-sections <section-glib>={none,zlib,zstd}[:level]" для выбора алгоритма сжатия секций.


    В библиотеке Libc++ продолжена реализация возможностей стандартов C++20, C++23 и C++26.

    C 3.6 до З.8 повышены требования к версии Python, необходимой для сборки LLVM.


Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=61882

Жизнь за Нер'зула!

Ответить