LLVM 13.0 kompilyator dəstinin buraxılışı

Altı aylıq inkişafdan sonra LLVM 13.0 layihəsinin buraxılışı təqdim edildi - proqramları RISC-yə bənzər virtual təlimatların aralıq bit koduna (aşağı səviyyəli virtual maşın) tərtib edən GCC-ə uyğun alətlər dəsti (tərtibçilər, optimallaşdırıcılar və kod generatorları). çoxsəviyyəli optimallaşdırma sistemi). Yaradılmış psevdokod JIT kompilyatorundan istifadə edərək proqramın icrası zamanı birbaşa maşın təlimatlarına çevrilə bilər.

Clang 13.0-da təkmilləşdirmələr:

  • Zəmanətli quyruq zəngləri üçün həyata keçirilən dəstək (funksiyanın ən sonunda alt proqrama zəng etmək, alt proqram özünü çağırdıqda quyruq rekursiyasını formalaşdırmaq). Zəmanətli quyruq zəngləri üçün dəstək C++-da "[[clang::musttail]]" atributu və "qaytarma" ifadəsində istifadə olunan C-də "__attribute__((musttail))" tərəfindən təmin edilir. Xüsusiyyət yığın istehlakına qənaət etmək üçün kodu düz bir iterasiyaya yerləşdirməklə optimallaşdırmaları həyata keçirməyə imkan verir.
  • "istifadə" bəyannamələri və cingilti uzantıları "[[]]" formatından istifadə edərək C++ 11-stil atributlarının müəyyənləşdirilməsinə dəstək verir.
  • İstifadəçi kodunda qorunan identifikatorları göstərdiyiniz zaman xəbərdarlıq göstərmək üçün "-Wreserved-identifier" bayrağı əlavə edildi.
  • Parametr və ya dəyişən təyin edilib, lakin istifadə olunmursa, xəbərdarlıq göstərmək üçün "-Unused-am-set-parameter" və "-Wunused- but-set-variable" bayraqları əlavə edilib.
  • Çıxarma əməliyyatlarında null göstəricinin istifadəsi səbəbindən kodun qeyri-müəyyən davranış təqdim edə biləcəyi təqdirdə xəbərdarlıq etmək üçün "-Wnull-göstərici-çıxma" bayrağı əlavə edildi.
  • Hər bir kod faylı üçün emal olunan faylda müəyyən edilmiş hər bir funksiya üçün yığın çərçivələrinin ölçüsü haqqında məlumatı ehtiva edən əlavə ".su" faylı yaratmaq üçün "-fstack-usage" bayrağı əlavə edildi.
  • Statik analizatora yeni çıxış növü əlavə edilmişdir - “sarif-html” bu, eyni vaxtda HTML və Sarif formatlarında hesabatların yaradılmasına səbəb olur. Yeni allocClassWithName yoxlanışı əlavə edildi. “-analyzer-display-progress” seçimini təyin edərkən, hər bir funksiyanın analiz vaxtı göstərilir. Ağıllı göstərici analizatoru (alpha.cplusplus.SmartPtr) demək olar ki, hazırdır.
  • OpenCL dəstəyi ilə əlaqəli imkanlar genişləndirildi. Yeni cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields və __cl_clang_non_portable_kernel_param_types uzantıları üçün əlavə dəstək. OpenCL 3.0 spesifikasiyasının tətbiqi davam etdirilmişdir. C üçün, başqa versiya açıq şəkildə seçilmədikdə, OpenCL 1.2 spesifikasiyası standart olaraq istifadə olunur. C++ üçün “.clcpp” uzantılı fayllar üçün dəstək əlavə edilmişdir.
  • OpenMP 5.1 spesifikasiyasında müəyyən edilmiş loop transformasiya direktivləri (“#pragma omp unrol” və “#pragma omp kafel”) üçün dəstək həyata keçirilib.
  • Clang-format yardım proqramına əlavə seçimlər: şərhlərdən əvvəl boşluqların sayını müəyyən etmək üçün SpacesInLineCommentPrefix, girişlərin, lambda ifadələrinin və preprosessor direktivlərinin uyğunlaşdırılmasına nəzarət etmək üçün IndentAccessModifiers, LambdaBodyIndentation və PPIndentWidth. Başlıq fayllarının (SortIncludes) sadalanmasının çeşidlənməsi imkanları genişləndirilmişdir. JSON fayllarının formatlanması üçün əlavə dəstək.
  • Yeni çeklərin böyük bir hissəsi linter clang-səliqəyə əlavə edildi.

LLVM 13.0-da əsas yeniliklər:

  • İstisnaların idarə edilməsi mərhələsində Qayıdış yönümlü Proqramlaşdırma (ROP) üsullarından istifadə etməklə qurulmuş istismarların icrasından qorunmaq üçün CET (Windows Control-flow Enforcement Technology) texnologiyasından istifadə etmək üçün “-ehcontguard” seçimi əlavə edildi.
  • Debuginfo-test layihəsinin adı cross-layihə testləri olaraq dəyişdirilib və sazlama məlumatı ilə məhdudlaşmır, müxtəlif layihələrin komponentlərini sınaqdan keçirmək üçün nəzərdə tutulub.
  • Montaj sistemi bir neçə paylamanın qurulmasına dəstək verir, məsələn, biri kommunal proqramlarla, digəri isə tərtibatçılar üçün kitabxanalarla.
  • AArch64 arxitekturasının arxa hissəsində Armv9-A RME (Realm Management Extension) və SME (Scalable Matrix Extension) uzantılarına dəstək assemblerdə həyata keçirilir.
  • Hexagon arxitekturası üçün arxa plana ISA V68/HVX dəstəyi əlavə edilmişdir.
  • X86 backend AMD Zen 3 prosessorları üçün təkmilləşdirilmiş dəstəyə malikdir.
  • AMDGPU backendinə GFX1013 RDNA2 APU dəstəyi əlavə edildi.
  • Libc++ “konseptlər” kitabxanasının tamamlanması da daxil olmaqla, C++20 və C++2b standartlarının yeni xüsusiyyətlərini tətbiq etməyə davam edir. MinGW əsaslı Windows platforması üçün std::fayl sistemi üçün əlavə dəstək. Başlıq faylları ayrıldı , Və . Tam tətbiq edilməmiş funksionallığı olan başlıq fayllarını deaktiv etmək üçün LIBCXX_ENABLE_INCOMPLETE_FEATURES qurma seçimi əlavə edildi.
  • Big-endian Aarch64 prosessorları üçün dəstəyin həyata keçirildiyi LLD əlaqələndiricisinin imkanları genişləndirildi və Mach-O backend adi proqramları birləşdirməyə imkan verən vəziyyətə gətirildi. LLD istifadə edərək Glibc-i əlaqələndirmək üçün lazım olan təkmilləşdirmələr daxildir.
  • llvm-mca (Maşın Kodu Analizatoru) yardım proqramı, ARM Cortex-A55 kimi təlimatları ardıcıllıqla yerinə yetirən prosessorlar üçün dəstək əlavə etdi (sıralı superskalar boru kəməri).
  • AArch64 platforması üçün LLDB debugger Pointer Authentication, MTE (MemTag, Memory Tagging Extension) və SVE registrləri üçün tam dəstək verir. Hər bir yaddaş ayırma əməliyyatına teqləri bağlamağa və düzgün teq ilə əlaqələndirilməli olan yaddaşa daxil olan zaman göstəricinin yoxlanılmasını təşkil etməyə imkan verən əlavə əmrlər.
  • LLDB sazlayıcısı və Fortran dili üçün ön hissə - Flanq layihə tərəfindən yaradılan ikili yığıncaqlara əlavə edilmişdir.

Mənbə: opennet.ru

Добавить комментарий