LLVM 13.0 хөрвүүлэгчийн багцыг гаргасан

Зургаан сарын турш хөгжүүлсний дараа LLVM 13.0 төслийн хувилбарыг танилцуулав - GCC-тэй нийцтэй хэрэгслийн иж бүрдэл (эмхэтгэгчид, оновчтой болгогчид болон код үүсгэгчид) нь програмуудыг RISC-тэй төстэй виртуал зааврын завсрын бит код болгон хөрвүүлдэг (бага түвшний виртуал машин). олон түвшний оновчлолын систем). Үүсгэсэн псевдокодыг JIT хөрвүүлэгч ашиглан программыг гүйцэтгэх үед шууд машины заавар болгон хувиргаж болно.

Clang 13.0-ийн сайжруулалт:

  • Баталгаат сүүл дуудлагын дэмжлэгийг хэрэгжүүлсэн (функцын хамгийн төгсгөлд дэд програмыг дуудах, хэрэв дэд програм өөрөө дуудвал сүүлний рекурс үүсгэх). Баталгаат дуудлагын дэмжлэгийг C++ хэл дээрх "[[clang::musttail]]" шинж чанар, "буцах" мэдэгдэлд ашигласан C хэл дээрх "__attribute__((musttail))"-аар хангадаг. Энэ функц нь стекийн хэрэглээг хэмнэхийн тулд кодыг хавтгай давталт болгон байрлуулснаар оновчлолыг хэрэгжүүлэх боломжийг олгодог.
  • "ашиглах" мэдэгдлүүд болон clang өргөтгөлүүд нь "[[]]" форматыг ашиглан C++ 11 загварын шинж чанаруудыг тодорхойлоход дэмжлэг үзүүлдэг.
  • Хэрэглэгчийн кодонд нөөцлөгдсөн танигчийг зааж өгөх үед анхааруулга харуулахын тулд "-Wreserved-identifier" гэсэн тугийг нэмсэн.
  • "-Wunused-but-set-parameter" болон "-Wunused-but-set-variable" гэсэн тугуудыг нэмсэн бөгөөд хэрэв параметр эсвэл хувьсагчийг тохируулсан боловч ашиглаагүй бол анхааруулга харуулах болно.
  • Хасах үйлдлүүдэд тэг заагч ашигласантай холбоотойгоор код нь тодорхойгүй үйлдэл үүсгэж болзошгүй тохиолдолд анхааруулга өгөхийн тулд "-Wnull-заагч-хасах" тугийг нэмсэн.
  • Боловсруулж буй файлд тодорхойлсон функц бүрийн стек фреймийн хэмжээг агуулсан нэмэлт ".su" файлыг кодын файл бүрт үүсгэхийн тулд "-fstack-usage" тугийг нэмсэн.
  • Статик анализаторт шинэ гаралтын төрлийг нэмсэн - "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_зөөврийн бус_kernel_param_types зэрэг шинэ өргөтгөлүүдийн дэмжлэгийг нэмсэн. OpenCL 3.0 тодорхойлолтын хэрэгжилт үргэлжилсээр байна. С-ийн хувьд өөр хувилбарыг сонгоогүй тохиолдолд OpenCL 1.2 тодорхойлолтыг анхдагчаар ашигладаг. C++-д “.clcpp” өргөтгөлтэй файлуудын дэмжлэг нэмэгдсэн.
  • OpenMP 5.1 тодорхойлолтод тодорхойлсон гогцоо хувиргах удирдамж (“#pragma omp unrol” болон “#pragma omp хавтан”)-д дэмжлэг үзүүлэв.
  • Clang форматын хэрэгсэлд нэмэлт сонголтууд: Тайлбарын өмнөх зайны тоог тодорхойлох SpacesInLineCommentPrefix, оруулга, ламбда илэрхийлэл болон урьдчилсан процессорын зааврын зэрэгцүүлэлтийг хянах IndentAccessModifiers, LambdaBodyIndentation болон PPIndentWidth. Толгой файлуудын тооллогыг эрэмбэлэх боломжууд (SortIncludes) өргөжсөн. JSON файлуудыг форматлахад дэмжлэг нэмсэн.
  • Шинэ чекүүдийн ихээхэн хэсгийг linter clang-tidy-д нэмсэн.

LLVM 13.0-ийн гол шинэчлэлүүд:

  • "-ehcontguard" сонголтыг нэмсэн CET (Windows Control-flow Enforcement Technology) технологийг онцгой тохиолдлуудыг шийдвэрлэх үе шатанд Буцах хандлагатай програмчлалын (ROP) техник ашиглан бүтээгдсэн мөлжлөгийн гүйцэтгэлээс хамгаалах.
  • Дебагinfo-туршилтын төслийн нэрийг төсөл хоорондын тест гэж өөрчилсөн бөгөөд дибаг хийх мэдээллээр хязгаарлагдахгүй өөр өөр төслийн бүрэлдэхүүн хэсгүүдийг турших зориулалттай.
  • Угсралтын систем нь хэд хэдэн түгээлтийг бий болгоход дэмжлэг үзүүлдэг, жишээлбэл, нэг нь хэрэгслүүдтэй, нөгөө нь хөгжүүлэгчдэд зориулсан номын сантай.
  • AArch64 архитектурын арын хэсэгт Armv9-A RME (Realm Management Extension) болон SME (Scalable Matrix Extension) өргөтгөлүүдийн дэмжлэг ассемблер дээр хэрэгждэг.
  • ISA V68/HVX-ийн дэмжлэгийг Hexagon архитектурын арын хэсэгт нэмсэн.
  • x86 backend нь AMD Zen 3 процессоруудын дэмжлэгийг сайжруулсан.
  • AMDGPU арын хэсэгт GFX1013 RDNA2 APU-н дэмжлэгийг нэмсэн.
  • Libc++ нь C++20 болон C++2b стандартуудын шинэ боломжуудыг үргэлжлүүлэн хэрэгжүүлсээр байгаа бөгөөд үүнд "үзэл баримтлал" номын санг дуусгах болно. MinGW-д суурилсан Windows платформд зориулсан std::filesystem-ийн дэмжлэгийг нэмсэн. , болон толгой файлуудыг тусгаарласан. Бүрэн хэрэгжээгүй функцтэй толгой файлуудыг идэвхгүй болгохын тулд LIBCXX_ENABLE_INCOMPLETE_FEATURES бүтээх сонголтыг нэмсэн.
  • Big-endian Aarch64 процессоруудын дэмжлэгийг хэрэгжүүлсэн LLD холбогчийн чадавхийг өргөжүүлж, Mach-O backend нь ердийн програмуудыг холбох боломжийг олгодог байдалд хүргэсэн. LLD ашиглан Glibc-г холбоход шаардлагатай сайжруулалтыг оруулсан.
  • Llvm-mca (Machine Code Analyzer) хэрэгсэл нь ARM Cortex-A55 гэх мэт зааварчилгааг дарааллаар нь гүйцэтгэдэг процессоруудад (суперскаляр дамжуулах хоолой) дэмжлэгийг нэмсэн.
  • AArch64 платформд зориулсан LLDB дибаглагч нь заагчийн баталгаажуулалт, MTE (MemTag, санах ойн тэмдэглэгээний өргөтгөл) болон SVE регистрүүдэд бүрэн дэмжлэг үзүүлдэг. Санах ойг хуваарилах үйлдэл бүрт шошгуудыг холбох, санах ойд хандах үед заагчийг шалгах ажлыг зохион байгуулах командуудыг нэмсэн бөгөөд энэ нь зөв шошготой холбоотой байх ёстой.
  • LLDB дибаглагч болон Fortran хэлний урд хэсэг - Фланг нь төслөөр үүсгэгдсэн хоёртын чуулганд нэмэгдсэн.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх