Pas disa muajsh zhvillimi, u publikua versioni i projektit LLVM 13.0 â njĂ« mjet i pĂ«rputhshĂ«m me GCC (kompilatorĂ«, optimizues dhe gjeneratorĂ« kodi), qĂ« kompilon programet nĂ« midis tĂ« bit kodit tĂ« instrukcioneve virtuale tĂ« ngjashme me RISC (njĂ« makinĂ« virtuale me nivel tĂ« ulĂ«t me njĂ« sistem optimizimi shumĂ«-niveli). Pseudokodi i gjeneruar mund tĂ« transformohet pĂ«rmes JIT kompilatorit nĂ« instrukcione makine nĂ« momentin e ekzekutimit tĂ« programit.
Përmirësime në Clang 13.0:
- U realizua mbështetje për thirrje të garantuara tail (thirrje në fund të funksionit që krijon rekursivitet tail në rastin kur funksioni thirret vetë). Mbështetje për thirrje të garantuara tail është siguruar përmes atributit «[[clang::musttail]]» në C++ dhe «__attribute__((musttail))» në C, të aplikuara në shprehjen «return». Kjo mundësi lejon realizimin e optimizimeve përmes zhvillimit të kodit në një iteracion të sheshtë për të kursyer përdorimin e piles.
- Në deklaratat «using» dhe zgjerimet e clang është realizuar mbështetje për definimin e atributeve në stilin C++11, duke përdorur formatin «[[]]».
- U shtua flamuri «-Wreserved-identifier» për të nxjerrë një paralajmërim kur tregohen identifikatorë të rezervuar në kodin përdorues.
- U shtuan flamujt «-Wunused-but-set-parameter» dhe «-Wunused-but-set-variable» për të nxjerrë një paralajmërim nëse një parameter ose një variabël është vendosur, por nuk përdoret.
- U shtua flamuri «-Wnull-pointer-subtraction» për të nxjerrë një paralajmërim nëse kodi mund të çojë në sjellje të paqartë për shkak të përdorimit të një treguesi të null në operacionet e zbritjes.
- U shtua flamuri «-fstack-usage» për të gjeneruar për çdo dosje me kod një dosje shtesë «.su», e cila përmban informacione mbi madhësinë e kadrove të piles për çdo funksion të caktuar në dosjen e përpunuar.
- NĂ« analizuesin statik u shtua njĂ« lloj i ri dalĂ«s â «sarif-html», duke çuar nĂ« formimin e raporteve njĂ«kohĂ«sisht nĂ« formatet HTML dhe Sarif. U shtua njĂ« kontroll i ri allocClassWithName. NĂ«se Ă«shtĂ« e specifikuar opsioni «-analyzer-display-progress», siguron daljen e kohĂ«s sĂ« analizĂ«s pĂ«r çdo funksion. ĂshtĂ« afĂ«rsisht e gatshme analiza e treguesve tĂ« mençur (alpha.cplusplus.SmartPtr).
- Janë zgjeruar mundësitë që lidhen me mbështetje OpenCL. U shtua mbështetje për zgjerime të reja cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields dhe __cl_clang_non_portable_kernel_param_types. U vazhdua realizimi i specifikimeve OpenCL 3.0. Për C, specifikimi OpenCL 1.2 është aktivizuar si parazgjedhje, përveç nëse një version tjetër është specifikuar shprehimisht. Për C++ është shtuar mbështetje për skedarë me zgjedhje «.clcpp».
- U realizua mbështetje për direktivat e transformimit të cikleve («#pragma omp unrol» dhe «#pragma omp tile»), të definuara në specifikimin OpenMP 5.1.
- Në mjetin clang-format u shtuan opsionet: SpacesInLineCommentPrefix për të përcaktuar numrin e hapësirave para komenteve, IndentAccessModifiers, LambdaBodyIndentation dhe PPIndentWidth për të menaxhuar radhitjen e deklaratave, shprehjeve lambda dhe direktivave të paraprocesorit. Mundësitë e renditjes së përfshirjes së skedave janë zgjeruar. U shtua mbështetje për formatimin e skedarëve JSON.
- Në linter clang-tidy u shtua një sasi e madhe e kontrolleve të reja.
Novitetet kryesore në LLVM 13.0:
- U shtua opsioni «-ehcontguard» për të përdorur teknologjinë CET (Windows Control-flow Enforcement Technology) për të mbrojtur në fazën e trajtimit të përjashtimeve nga ekzekutimi i shfrytëzimeve të ndërtuara duke përdorur teknikat e programimit të orientuar nga kthimi (ROP, Return-Oriented Programming).
- Projekti debuginfo-test u rinovua në cross-project-tests dhe është e projektuar për testimin e komponenteve nga projekte të ndryshme, pa u kufizuar në informacionin për debugimin.
- Në sistemin e ndërtimit, u siguruar mbështetje për ndërtimin e disa distribucioneve, për shembull, një me mjete dhe një tjetër me biblioteka për zhvillues.
- Në backend për arkitekturën AArch64 në asamblues, u realizua mbështetje për zgjerimet Armv9-A RME (Realm Management Extension) dhe SME (Scalable Matrix Extension).
- Në backend për arkitekturën Hexagon u shtua mbështetje për ISA V68/HVX.
- Në backend për arkitekturën x86 u përmirësua mbështetja për procesorët AMD Zen 3.
- Në backend AMDGPU u shtua mbështetje për APU GFX1013 RDNA2.
- Në Libc++ vazhdoi realizimi i mundësive të reja të standardeve C++20 dhe C++2b, përfshirë përfundimin e librit «concepts». Për platformën Windows bazuar në MinGW, u shtua mbështetje për std::filesystem. U ndanë skedarët e titujve <algorithm>, <iterator> dhe <utility>. U shtua opsioni i ndërtimit LIBCXX_ENABLE_INCOMPLETE_FEATURES për të çaktivizuar skedarët e titujve me funksionalitete të implementuara jo plotësisht.
- Mundësitë e linker LLD u zgjeruan, ku u realizua mbështetje për procesorët Aarch64 Big-endian, dhe backend Mach-O u soll në një gjendje që lejon përmbledhjen e programeve të zakonshme. U përfshinë përmirësime të nevojshme për përmbledhjen e Glibc duke përdorur LLD.
- Në mjetin llvm-mca (Analizuesi i Kodit të Makinerisë) është shtuar mbështetje për procesorët që ekzekutojnë instruksionet në rend (in-order superscalar pipeline), si ARM Cortex-A55.
- Në debugger-in LLDB për platformën AArch64 është realizuar mbështetje e plotë për autentikimin e treguesve (Pointer Authentication), mekanizmin MTE (MemTag, Memory Tagging Extension) dhe regjistrat SVE. Janë shtuar komandat që lejojnë lidhjen e etiketave me çdo operacion alokimi të memories dhe organizimin e kontrollit të treguesit gjatë qasjes në memorje, i cili duhet të lidhet me etiketën e saktë.
- Në përbërje të ndërtimeve binare të formuara nga projekti janë shtuar debugger-i LLDB dhe frontend-i për gjuhën Fortran - Flang.
Burimi: opennet.ru
