По шест месеци развој, беше претставено изданието на проектот LLVM 13.0 - комплет алатки компатибилен со GCC (компајлери, оптимизатори и генератори на код) кој ги компајлира програмите во среден биткод на виртуелни инструкции слични на RISC (виртуелна машина на ниско ниво со систем за оптимизација на повеќе нивоа). Генерираниот псевдокод може да се конвертира со помош на JIT компајлер во машински инструкции директно во моментот на извршување на програмата.
Подобрувања во Clang 13.0:
- Спроведена поддршка за гарантирани повици на опашката (повикување потпрограма на самиот крај на функцијата, формирање на рекурзија на опашката ако потпрограмата се повика самата). Поддршката за гарантираните повици на опашката е обезбедена со атрибутот „[[clang::musttail]]“ во C++ и „__attribute__((musttail))“ во C, што се користи во изјавата „враќање“. Функцијата ви овозможува да имплементирате оптимизации со распоредување на кодот во рамна итерација за да заштедите потрошувачка на стек.
- „користење“ на декларации и екстензии на кланг обезбедуваат поддршка за дефинирање на атрибути во стилот на C++11 користејќи го форматот „[[]].
- Додадено е знаменцето „-Wreserved-identifier“ за прикажување предупредување кога ќе наведете резервирани идентификатори во корисничкиот код.
- Додадени се ознаките „-Wunused-but-set-parameter“ и „-Wunused-but-set-variable“ за прикажување на предупредување доколку параметар или променлива е поставена, но не се користи.
- Додадено е знаменце „-Wnull-pointer-subtraction“ за да се издаде предупредување доколку кодот може да воведе недефинирано однесување поради употребата на нула покажувач во операциите за одземање.
- Додадено е знаменцето „-fstack-usage“ за да се генерира за секоја датотека со код дополнителна датотека „.su“ која содржи информации за големината на рамки на магацинот за секоја функција дефинирана во датотеката што се обработува.
- Додаден е нов тип на излез во статичкиот анализатор - „sarif-html“, што доведува до генерирање извештаи истовремено во HTML и Sarif формати. Додадена е нова проверка allocClassWithName. При одредување на опцијата „-analyzer-display-progress“, се прикажува времето на анализа на секоја функција. Паметниот анализатор на покажувачи (alpha.cplusplus.SmartPtr) е речиси подготвен.
- Проширени се можностите поврзани со поддршката за OpenCL. Додадена е поддршка за нови екстензии cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields и __cl_clang_non_portable_kernel_param_types. Продолжи имплементацијата на спецификацијата OpenCL 3.0. За C, спецификацијата OpenCL 1.2 се користи стандардно, освен ако не е експлицитно избрана друга верзија. За C++, додадена е поддршка за датотеки со наставка „.clcpp“.
- Имплементирана е поддршка за директивите за трансформација на јамка („#pragma omp unrol“ и „#pragma omp tile“) дефинирани во спецификацијата OpenMP 5.1.
- Додадени опции во алатката за формат clang: SpacesInLineCommentPrefix за дефинирање на бројот на празни места пред коментарите, IndentAccessModifiers, LambdaBodyIndentation и PPIndentWidth за контрола на порамнувањето на записите, ламбда изразите и директивите на предпроцесорот. Проширени се можностите за подредување на набројувањето на датотеки со заглавие (SortIncludes). Додадена е поддршка за форматирање на датотеки JSON.
- Додадени се голем дел од нови чекови на леталото што е уредно.
Клучни иновации во LLVM 13.0:
- Додадена е опцијата „-ehcontguard“ за користење на CET технологијата (Windows Технологија за спроведување на контрола на проток) за заштита во фазата на справување со исклучоци од извршување на експлоатации изградени со користење на техники на програмирање ориентирано кон враќање (ROP).
- Проектот за дебагинфо-тест е преименуван во тестови меѓу проекти и е дизајниран да тестира компоненти од различни проекти, не ограничувајќи се на информации за дебагирање.
- Системот за склопување обезбедува поддршка за изградба на неколку дистрибуции, на пример, една со комунални услуги, а другата со библиотеки за програмери.
- Во заднината за архитектурата AArch64, поддршката за екстензии Armv9-A RME (Реалм менаџмент екстензија) и SME (продолжување на матрица со скалабилност) е имплементирана во асемблерот.
- Поддршката за ISA V68/HVX е додадена во задниот дел за архитектурата Шестоаголна.
- Заднината x86 има подобрена поддршка за AMD Zen 3 процесорите.
- Додадена е поддршка за GFX1013 RDNA2 APU на задниот дел на AMDGPU.
- Libc++ продолжува да имплементира нови функции на стандардите C++20 и C++2b, вклучувајќи го и комплетирањето на библиотеката „концепти“. За платформата Windows Додадена е поддршка за std::filesystem базиран на MinGW. Заглавните датотеки се одделени. , И Додадена е опцијата за градење LIBCXX_ENABLE_INCOMPLETE_FEATURES за оневозможување на заглавните датотеки со нецелосна функционалност.
- Проширени се можностите на поврзувачот LLD, во кој е имплементирана поддршката за Big-endian Aarch64 процесорите, а заднината Mach-O е доведена до состојба која овозможува поврзување на редовни програми. Вклучени подобрувања потребни за поврзување на Glibc користејќи LLD.
- Услужната алатка llvm-mca (Machine Code Analyzer) додаде поддршка за процесори кои извршуваат инструкции по ред (по редослед суперскаларен гасовод), како што е ARM Cortex-A55.
- Дебагерот LLDB за платформата AArch64 обезбедува целосна поддршка за Pointer Authentication, MTE (MemTag, Memory Tagging Extension) и SVE регистри. Додадени команди кои ви дозволуваат да ги врзувате ознаките за секоја операција за доделување меморија и да организирате проверка на покажувачот при пристап до меморијата, која мора да биде поврзана со правилната ознака.
- Дебагерот LLDB и предниот дел за јазикот Fortran - Flang се додадени на бинарните склопови генерирани од проектот.
Извор: opennet.ru
