LLVM 16.0 і він був випущений, і це його новини

Логотип LLVM

LLVM — це основа для розробки компіляторів, а також для створення нових мов програмування та вдосконалення існуючих мов.

Після трохи більше шести місяців розробки, запуск нова версія проекту LLVM 16.0, версія, в якій реалізовано велику кількість змін і покращень.

Для тих, хто не знайомий з LLVM, ви повинні знати, що це є компілятором, сумісним з GCC (компілятори, оптимізатори та генератори коду), який компілює програми у RISC-подібний проміжний біт-код віртуальної інструкції (низькорівнева віртуальна машина з багаторівневою системою оптимізації).

Згенерований псевдокод може бути перетворений JIT-компілятором у машинні інструкції просто під час виконання програми.

Основні нові можливості LLVM 16.0

У цій представленій новій версії ми можемо знайти кілька важливих покращень в clang 16.0, з яких виділяється стандарт C++/ObjC++ за замовчуванням, який встановлено значення gnu++17 (раніше gnu++14), який передбачає підтримку функцій C++17 із розширеннями GNU за замовчуванням. У коді LLVM дозволено використання елементів, визначених у стандарті C++17.

Ще одна зміна, яка виділяється, полягає в тому, що вона була додана підтримка процесорів Cortex-A715, Cortex-X3 і Neoverse V2, Armv8.3 розширення та багатоверсійні функції для серверної частини AArch64.
La сумісність платформи Armv2, Armv2A, Armv3 і Armv3M припинено у серверній частині архітектури ARM, для якої не гарантувалося правильне створення коду. Додано можливість генерувати код інструкцій для роботи з комплексними числами та додано підтримка архітектур наборів інструкцій (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT до серверної частини X86.

Крім того, підвищено вимоги до побудови LLVM, Крім того, збірка тепер має бути сумісною зі стандартом C++17, тобто для збірки потрібна принаймні GCC 7.1, Clang 5.0, Apple Clang 10.0 або Visual Studio 2019 16.7.

З іншого боку, це також підкреслює покращені серверні модулі для архітектур MIPS, PowerPC і RISC-V, а також підтримку налагодження 64-розрядних виконуваних файлів для архітектури LoongArch у налагоджувачі LLDB і покращену обробку символів налагодження COFF.

З інших змін що виділяються:

  • У бібліотеці Libc++ основна робота була зосереджена на реалізації підтримки нових можливостей стандартів C++20 і C++23.
  • Час зв’язку було значно скорочено в компонувальнику LDD завдяки розпаралелюванню сканування переміщення адреси та операцій ініціалізації розділу. Додано підтримку стиснення розділів за допомогою алгоритму ZSTD.
  • Також виділено розширені функції, реалізовані за допомогою стандарту C++20.
  • захоплення структурованих посилань у лямбда-функціях.
  • Оператор рівності у виразах.
  • Можливість не вказувати ключове слово typename у деяких контекстах,
  • Дозволеність ініціалізації додано між дужками ("Aggr(val1, val2)").
  • Реалізовані функції, визначені в майбутньому стандарті C++2b.
  • Підтримується тип char8_t,
  • Розширено діапазон символів, дозволених для використання в "\N{…}",
  • Додано можливість використовувати змінні, оголошені як "static constexpr", у функціях, оголошених як constexpr.
  • Реалізовані функції, визначені в майбутньому стандарті C2x C:
  • Додано підтримку для завантаження кількох файлів конфігурації (спочатку завантажуються файли конфігурації за замовчуванням, а потім ті, що вказані за допомогою прапорця «–config=», який тепер можна вказувати кілька разів).
  • Змінено порядок завантаження файлів конфігурації за замовчуванням: clang намагається завантажити файл першим - .cfg, і якщо він не може його знайти, він намагається завантажити два файли .cfg і .cfg.
  • Додано новий прапор збірки "-fcoro-aligned-allocation" для стандартного розповсюдження з вирівнюванням кадрів.
  • Додано прапорець «-fmodule-output», щоб увімкнути модель однофазної збірки стандартних модулів C++.
  • Додано режим «-Rpass-analysis=stack-frame-layout» для діагностики проблем із макетом стекового кадру.
  • Додано новий атрибут __attribute__((target_version("cpu_features")))) і розширено функціональні можливості атрибута __attribute__((target_clones("cpu_features1″,"cpu_features2",…))) для вибору певних версій функцій, наданих ЦП AArch64 .
  • Розширені засоби діагностики:
  • Додано попередження "-Wsingle-bit-bitfield-constant-conversion", щоб перехопити неявне скорочення під час призначення однобітовому бітовому полю зі знаком.
  • Розширена діагностика для неініціалізованих змінних constexpr.
  • Додано попередження «-Wcast-function-type-strict» і «-Wincompatible-function-pointer-types-strict», щоб виявити можливі проблеми під час приведення типів функцій.

В кінці кінців Якщо вам цікаво дізнатись більше про це, Ви можете перевірити деталі в наступне посилання.


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: AB Internet Networks 2008 SL
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.