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

Зургаан сарын хөгжүүлэлтийн дараа LLVM 22.1.0 хувилбар гарсан. Энэ нь програмуудыг RISC төст виртуал зааврын завсрын биткод (олон түвшний оновчлолын системтэй доод түвшний виртуал машин) болгон хөрвүүлдэг хэрэгслүүдийг (хөрвүүлэгч, оновчлогч, код үүсгэгч) боловсруулдаг. Үүсгэсэн псевдокодыг өгөгдсөн зорилтот платформын машины код болгон хөрвүүлж эсвэл програмыг гүйцэтгэх явцад машины зааврыг шууд үүсгэхийн тулд яг цагтаа (JIT) хөрвүүлэгч ашиглаж болно. LLVM технологид үндэслэн төсөл нь C, C++, Objective-C програмчлалын хэлийг дэмждэг Clang хөрвүүлэгчийг боловсруулж байна. 18.x салбараас эхлэн төсөл нь шинэ хувилбарын дугаарлалтын схемд шилжсэн бөгөөд үүний дагуу хөгжүүлэлтийн явцад 0 хувилбар ("N.0") ашиглагдаж, анхны тогтвортой хувилбар нь "N.1" дугаарлагдсан байна.

Clang 22-ийн сайжруулалтууд нь:

  • Өвөрмөц танигчтай malloc зэрэг функцуудыг ашиглан гүйцэтгэсэн санах ойн хуваарилалтын үйлдлүүдийг тэмдэглэх санах ойн хуваарилалтын жетон (Хуваарилах Токен)-ийн дэмжлэгийг нэмсэн. Хуваарилах токен нь овоолгын мэдээллийг бүтэцжүүлэх, санах ойн алдагдлыг илрүүлэхийг хялбарчлах, объектуудыг тэдгээрийн зорилго эсвэл өөрчлөлтийн хэв маягт үндэслэн бүлэглэх боломжийг олгодог (жишээлбэл, "халуун"-г "хүйтэн" өгөгдлөөс ялгах). Идэвхжүүлэхийн тулд "-fsanitize=alloc-token" тугийг ашиглана уу.
  • C хэлтэй холбоотой онцлог шинж чанарууд:
    • "Хойшлуулах" хойшлуулсан гүйцэтгэлийн механизмыг тодорхойлсон төслийн тодорхойлолтыг хэрэгжүүлсэн бөгөөд энэ нь одоогийн хамрах хүрээнээс гарах үед үйлдлүүдийг гүйцэтгэх боломжийг олгодог. "Хойшлуулах" дэмжлэгийг идэвхжүүлэхийн тулд "-fdefer-ts" тугийг нэмсэн.
    • GCC-д ижил төстэй функцийг тусгасан __builtin_stack_address() суурилагдсан функц нэмэгдсэн. Энэ функц нь __builtin_stack_address() гэж дуудагдсан одоогийн функц болон түүний дуудсан дараагийн функцүүдийн стекийн хэсгийг тусгаарласан стек хаягийг буцаана.
  • Ирээдүйн C2y стандартад зориулан хөгжүүлж буй чадварууд:
    • Нэрлэсэн давталтуудын дэмжлэг нэмэгдсэн бөгөөд энэ нь давталт болон switch операторуудад нэр оноох боломжийг олгодог бөгөөд эдгээрийг break болон continue операторуудад зааж өгч, гарах давталтыг тодорхой зааж өгч болно. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // go to CONT1 continue outer; // go to CONT2 // CONT1 } // CONT2 }
    • Өвөрмөц танигч нэр үүсгэх зориулалттай "__COUNTER__" макроны хэрэгжилтийг өргөжүүлж, стандартад оруулсан. Энэ макро руу 2147483647 дуудлага хийх хязгаарыг тогтоосон; энэ хязгаараас хэтэрвэл алдаа гарна.
    • "extern inline" гэж зарлагдсан функц доторх статик функц эсвэл хувьсагчийг ашиглах үед анхааруулга (-Wstatic-in-line)-г арилгасан.
  • C23 C стандартад тодорхойлсон чадварууд:
    • float.h толгой файл нь одоо FLT_SNAN, DBL_SNAN, болон LDBL_SNAN макросуудыг дэмждэг бөгөөд эдгээр нь float, double болон long double төрлүүдэд зориулсан дохиоллын NaN утгуудыг (арифметик үйлдлүүдэд ашиглагдах үед үл хамаарах зүйл үүсгэдэг) хэрэгжүүлдэг.
    • Хэрэв ижил талбартай бол өөр өөр нэрлэгдээгүй төрлүүдийг ижил орчуулгын нэгж дотор нийцтэй гэж үздэг алдааг зассан.
    • Хамаарлын сканнердах явцад алга болсон толгой файлуудыг үл тоомсорлоход ашигладаг "-MG" тугийг "#embed" директивүүд болгон өргөтгөсөн бөгөөд одоо "#embed" директивт заасан файл байхгүй үед "file not found" алдааг дардаг болсон.
  • C++-тэй холбоотой шинж чанарууд:
    • C++2c (C++26) тодорхойлолтод боловсруулсанчлан "constexpr" контекстэд бүтэцлэгдсэн холболтуудыг ашиглах чадварыг нэмсэн. Энэ нь тогтмол илэрхийллүүдийн лавлагаа нь одоо өөрөө тогтмол илэрхийллүүд байж болно гэсэн үг юм. Массив болон энгийн бүтцэд дэмжлэгийг хэрэгжүүлсэн (корпусууд хараахан дэмжигдээгүй байна). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • C++20 стандартын шаардлагын дагуу хязгаарлалтуудыг шалгахаас өмнө стандарт хэлбэрт хөрвүүлдэг болсон бөгөөд энэ нь оношлогооны мессежийг илүү нарийвчлалтай болгох, зөвхөн концепт-id-д ашиглагддаг загварын аргументууд дахь орлуулалтын алдааг зөв зохицуулах боломжийг олгодог.
    • Харьцуулах операторууд "<", ">", "<=", болон ">=" нь "<=>" оператороос нийлэгжсэн эсэхийг мэдэхийн тулд "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" гэсэн суурилагдсан функцүүдийн бүлгийг нэмсэн.
    • "-Wincompatible-pointer-types" параметрийг анхааруулгын оронд алдаа гаргахаар өөрчилсөн. Өмнөх зан төлөв рүү буцахын тулд "-Wno-error=incompatible-pointer-types" сонголтыг ашиглана уу.
  • __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumnum, __builtin_elementwise_maxnumnum, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter, болон __builtin_dedup_pack гэсэн суурилагдсан функцуудыг нэмсэн. Жишээлбэл, builtin_dedup_pack нь төрөл жагсаалтаас давхардсан утгыг арилгах боломжийг танд олгоно: MyTypeList = TypeList<__builtin_dedup_pack ашиглан …>; // үүссэн төрөл нь TypeList болно
  • UBSan ашиглан тодорхойлогдоогүй зан төлөвийг дибаг хийх үед (-fsanitize=undefined -fsanitize-trap=undefined), алдааны шалтгааны мэдээллийг үүсгэсэн дибаг хийх мэдээлэлд оруулсан болно. Алдааны мэдээллийн дэлгэрэнгүй түвшинг тодорхойлохын тулд "-fsanitize-debug-trap-reasons" тэмдэг нэмэгдсэн. Ерөнхий тайлбарын хувьд "basic" (жишээ нь, "Бүхэл тооны нэмэлт хальтарсан"), дэлгэрэнгүй мэдээллийг оруулахын тулд "detailed" (жишээ нь, "'a + b' дахь гарын үсэг бүхий бүхэл тооны нэмэлт хальтарсан") болгож тохируулж болно.
  • Шинэ хөрвүүлэгчийн тугуудыг нэмсэн:
    • "-f[no-]sanitize-debug-trap-reasons" нь "-fsanitize-trap" горимоор хөрвүүлэх үед алдааны шалтгаанууд дибаг хийх мэдээлэлд суулгагдсан эсэхийг хянах боломжийг олгоно.
    • Санах ойн хуваарилалтын жетонуудыг удирдахын тулд "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", болон "-fsanitize-alloc-token-extended" командуудыг ашиглана уу.
    • "-fmatrix-memory-layout" нь матрицын төрлүүдийн санах ойн зохион байгуулалтыг хянах зориулалттай (жишээ нь багана-том, мөр-том гэсэн утгатай).
  • Функцууд нь одоо malloc шинж чанартай төстэй "malloc_span" шинж чанартай болсон боловч блокийн төгсгөлд заагч эсвэл заагчийн хэмжээтэй талбар агуулсан span төст бүтцийг буцаадаг функцүүдэд хамааралтай болсон.
  • Холбоос хийх үед printf функцийн шаардлагатай статик холболттой хэрэгжилтийг динамикаар сонгохын тулд "modular_format" шинж чанарыг нэмсэн.
  • Оношлогооны болон статик шинжилгээний хэрэгслүүдийг өргөжүүлж, шинэ шалгалтуудыг нэмсэн (оношлогооны холбогдолтой хэдэн арван сайжруулалт).
  • SSE, AVX, болон AVX512 өргөтгөлүүдийн нэмэлт дотоод элементүүдийг X86 арын хэсэгт нэмсэн. Wildcat Lake (-march=wildcatlake) болон Nova Lake (-march=novalake) бичил архитектур дээр суурилсан Intel CPU-үүдэд зориулсан бүтээх горимуудыг нэмсэн.
  • AArch64 арын хэсэг нь одоо Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) болон Arm C1-Ultra (c1-ultra) процессоруудыг дэмждэг болсон. FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] болон FCVTA[US] заавруудад нэмэлт суурилуулсан функцуудыг нэмсэн. Функцийн олон хувилбарын (FMV) дэмжлэгийг тогтворжуулсан. Хэрэглэгчид одоо өөр өөр функцийн хувилбаруудын эрэмбийг өөрчлөх боломжтой болсон.
  • LoongArch32 (LA32R, LA32S) архитектурын дэмжлэг нэмэгдсэн.
  • ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, болон PowerPC архитектурын сайжруулсан backend-үүд.

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

DDoS хамгаалалт, VPS VDS сервер бүхий сайтуудад найдвартай хостинг худалдаж аваарай 🔥 DDoS хамгаалалттай, VPS VDS сервертэй найдвартай вэбсайт хостинг худалдаж аваарай | ProHoster