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 разширения по подразбиране. Използването на елементи, дефинирани в стандарта C++17, е разрешено в кода LLVM.

Друга от промените, които се открояват, е, че е добавен поддръжка за процесори 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",…))) за избор на конкретни версии на функции, предоставени от CPU 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. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.