د LLVM 15.0 کمپیلر سیټ خوشې کول

د شپږو میاشتو پراختیا وروسته، د LLVM 15.0 پروژې خوشې کول وړاندې شول - د GCC سره مطابقت لرونکی اوزار کټ (کمپیلر، اصلاح کونکي او کوډ جنریټرونه) چې پروګرامونه د RISC په څیر مجازی لارښوونو منځګړی بټکوډ کې تالیف کوي (د ټیټ کچې مجازی ماشین سره. د څو کچې اصلاح کولو سیسټم). تولید شوی سیډوکوډ د JIT کمپیلر په کارولو سره د ماشین لارښوونو ته مستقیم د برنامې اجرا کولو په وخت کې بدل کیدی شي.

په کلینګ 15.0 کې لوی پرمختګونه:

  • د x86 جوړښت پراساس د سیسټمونو لپاره ، د "-fzero-call-used-regs" بیرغ اضافه شوی ، کوم چې ډاډ ترلاسه کوي چې په فنکشن کې کارول شوي ټول CPU راجسترونه د فنکشن څخه د کنټرول بیرته راستنیدو دمخه صفر ته بیا تنظیم شوي. دا اختیار تاسو ته اجازه درکوي چې د دندو څخه د معلوماتو لیکیدو څخه ساتنه وکړئ او په استحصال کې د ROP (Return-oriented Programming) ګیجټونو جوړولو لپاره مناسب بلاکونو شمیر نږدې 20٪ کم کړئ.
  • د C کوډ لپاره د جوړښتونو د حافظې ځای په ځای کولو تصادفي تطبیق شوی ، کوم چې د زیانونو څخه د ګټې اخیستنې په صورت کې د جوړښتونو څخه د معلوماتو استخراج پیچلي کوي. تصادفي کول د randomize_layout او no_randomize_layout ځانګړتیاو په کارولو سره فعال او بند شوي ، او د "-frandomize-layout-seed" یا "-frandomize-layout-seed-file" بیرغ په کارولو سره د تخم تنظیم کولو ته اړتیا لري.
  • اضافه شوی "-fstrict-flex-arrays=" بیرغ "، د کوم سره چې تاسو کولی شئ په جوړښتونو کې د انعطاف وړ سرې عنصر لپاره حدود کنټرول کړئ (د انعطاف وړ سرې غړي، د جوړښت په پای کې د ناڅرګندې اندازې لړۍ). کله چې 0 (ډیفالټ) ته ټاکل کیږي، د جوړښت وروستی عنصر تل د انعطاف وړ سرې په توګه پروسس کیږي، 1 - یوازې اندازه []، [0] او [1] د انعطاف وړ سرې په توګه پروسس کیږي، 2 - یوازې اندازه [] او [0] د انعطاف وړ صف په څیر پروسس کیږي.
  • د C-لکه ژبې HLSL (د لوړې کچې شیډر ژبه) لپاره تجربوي ملاتړ اضافه شوی، چې په DirectX کې د شیډر لیکلو لپاره کارول کیږي.
  • د "-Warray-پیرامیټ" اضافه شوی ترڅو د ثابت او متغیر اوږدوالي صفونو سره د نامناسب دلیل اعلاناتو سره د اووررایډ افعالونو په اړه خبرداری ورکړي.
  • د MSVC سره ښه مطابقت. د "#pragma فنکشن" لپاره اضافه شوي ملاتړ (کمپیلر ته لارښوونه کوي چې د انلاین توسیع پرځای د فنکشن کال رامینځته کړي) او "#pragma alloc_text" (د فنکشن کوډ سره د برخې نوم تعریفوي) په MSVC کې چمتو شوي. د MSVC - مطابقت لرونکي / JMC او / JMC بیرغونو لپاره ملاتړ اضافه شوی.
  • کار د راتلونکي C2X او C++ 23 معیارونو ملاتړ ته دوام ورکوي. د C ژبې لپاره، لاندې پلي شوي دي: د noreturn خاصیت، کلیدي ټکي غلط او ریښتیا، د _BitInt(N) ډول د ورکړل شوي بټ ژورو بشپړو لپاره، * _WIDTH میکرو، د UTF-8 کوډ شوي حروفونو لپاره u8 مخکینۍ.

    د C++ لپاره، لاندې پلي کیږي: د ماډل ادغام، د فعالیت غړو ABI جلا کول، په ماډلونو کې د غیر محلي متغیرونو متحرک ابتکار امر شوی، څو اړخیز شاخص آپریټرونه، آٹو (x)، غیر لفظي متغیرات، ګوتو او لیبلونه په دندو کې د Constexpr په توګه اعلان شوي , د تېښتې سلسلې محدودې شوې، د فرار حروف نومول شوي.

  • د OpenCL او OpenMP مالتړ سره تړلي وړتیاوې پراخې شوې. د OpenCL توسیع cl_khr_subgroup_rotate لپاره ملاتړ اضافه شوی.
  • د x86 جوړښت لپاره، د غیر مشروط فارورډ جمپ عملیاتو وروسته د لارښوونو قیاس اجرا کولو له امله رامینځته شوي پروسیسرونو کې د زیانونو پروړاندې محافظت اضافه شوی. ستونزه په حافظه کې د څانګې لارښوونې سمدلاسه وروسته د لارښوونو دمخه پروسس کولو له امله رامینځته کیږي (SLS، مستقیم لاین قیاس). د محافظت فعالولو لپاره، د "-mharden-sls=[none|all|return|indirect-jmp]" اختیار وړاندیز شوی.
  • د پلیټ فارمونو لپاره چې د SSE2 توسیع ملاتړ کوي ، د _Float16 ډول اضافه شوی ، کوم چې د AVX512-FP16 لارښوونو لپاره د ملاتړ نشتوالي په صورت کې د فلوټ ډول په کارولو سره تقلید شوی.
  • د RDPRU لارښوونې کارولو کنټرول لپاره "-m[no-]rdpru" بیرغ اضافه شوی، د AMD Zen2 پروسیسرونو سره پیل کولو ملاتړ شوی.
  • د RETBLEED زیانونو په وړاندې د ساتنې لپاره د "-mfunction-return=thunk-extern" بیرغ اضافه شوی، کوم چې د لارښوونو د سلسلې په اضافه کولو سره کار کوي چې د غیر مستقیم څانګو لپاره د اټکلي اجرا کولو میکانیزم کې ښکیلتیا نه لري.

په LLVM 15.0 کې کلیدي نوښتونه:

  • د Cortex-M85 CPU، Armv9-A، Armv9.1-A او Armv9.2-A آرکیټیکچرونو، Armv8.1-M PACBTI-M توسیعونو لپاره ملاتړ اضافه شوی.
  • د DirectX لپاره یو تجرباتي پس منظر اضافه شوی چې د DXIL (DirectX منځنۍ ژبې) فارمیټ ملاتړ کوي چې د DirectX شیډرونو لپاره کارول کیږي. پس منظر د مجلس په جریان کې د "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" پیرامیټر په ټاکلو سره فعال شوی.
  • Libc++ د C++20 او C++2b معیارونو نوې بڼې پلي کولو ته دوام ورکوي، پشمول د "فارمیټ" کتابتون پلي کول او د "رینجز" کتابتون وړاندیز شوي تجربوي نسخه.
  • د x86، PowerPC او RISC-V آرکیټیکچرونو لپاره ښه شوي بیکینډونه.
  • د LLD لینکر او LLDB ډیبګر وړتیاوې لوړې شوې.

سرچینه: opennet.ru

Add a comment