
يتضمن LLVM 15.0 أيضًا عددًا من التحديثات المثيرة للاهتمام لـ C / C ++.
بعد ستة أشهر من التطوير ، تم الإعلان عن إطلاق مشروع LLVM 15.0التي فيها تم إجراء الكثير من التغييرات الرئيسية ، بالإضافة إلى دعم إضافي للمعالجات والبنيات الجديدة والمزيد.
بالنسبة لأولئك الذين ليسوا على دراية بـ LLVM ، يجب أن تعرف أن هذا هو مترجم متوافق مع دول مجلس التعاون الخليجي (المجمعين ، والمحسّنين ، ومولدي الأكواد) التي تجمع البرامج في رمز البت الوسيط للتعليمات الافتراضية مثل RISC (جهاز افتراضي منخفض المستوى مع نظام تحسين متعدد المستويات).
يمكن تحويل الشفرة الزائفة التي تم إنشاؤها بواسطة مترجم JIT إلى تعليمات الآلة فقط في وقت تنفيذ البرنامج.
الميزات الرئيسية الجديدة لـ LLVM 15.0
في هذا الإصدار الجديد الذي تم تقديمه ، تم إبراز أن ملف دعم معالجات Cortex-M85، وكذلك لهياكل 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 ، بما في ذلك استكمال تنفيذ مكتبة "التنسيق" والنسخة التجريبية المقترحة لمكتبة "النطاقات".
بالنسبة لجزء التغييرات المتعلقة بـ Clang 15.0 ، تم ذكر ذلك إضافة دعم تجريبي للغة C-like HLSL (لغة تظليل عالية المستوى) ، والتي تُستخدم لكتابة التظليل بدءًا من DirectX 9 ، بالإضافة إلى ترجمة تظليل HLSL إلى تنسيق ثنائي DXIL (لغة وسيطة DirectX) متوافق مع DirectX 12 ، بالإضافة إلى تنسيق SPIR -V المستخدم بواسطة Vulkan. فى المستقبل، تخطط لتنفيذ دعم تنسيق DXBC (DirectX Bytecode) المستخدم في DirectX 9-11. يتم توفير التنفيذ بواسطة Microsoft ويستند إلى DirectX Shader Compiler ، الذي تم إصداره في عام 2017 ، والذي تم إنشاؤه على أساس LLVM 3.7.
يذكر أيضًا أنه يستمر مع العمل على دعم معايير C2X و C ++ 23 المستقبلية. تم تطبيقه للغة C: سمة noreturn ، والكلمات الأساسية الخاطئة والصحيحة ، ونوع _BitInt (N) للأعداد الصحيحة لعمق بت معين ، ووحدات الماكرو * _WIDTH ، والبادئة u8 لأحرف UTF-8.
بالإضافة إلى ذلك ، تم تنفيذه من أجل C ++: دمج الوحدات ، عزل ABI لأعضاء الوظيفة ، التهيئة الديناميكية للمتغيرات غير المحلية في الوحدة النمطية ، عوامل مؤشر متعددة الأبعاد، auto (x)، متغيرات غير حرفية، geto and labels في الدوال المعلنة على أنها constexpr ، متواليات هروب محددة ، أحرف هروب مسماة.
للأنظمة القائمة على الهندسة المعمارية x86 ، تمت إضافة علامة "-fzero-call-used-regs" ، والذي يوفر تصفيرًا لجميع سجلات وحدة المعالجة المركزية المستخدمة في الوظيفة قبل إعادة التحكم من الوظيفة. هذا الخيار يحمي من تسرب البيانات من الوظائف وتقليل عدد الكتل المناسبة لإنشاء أجهزة ROP (البرمجة الموجهة نحو الإرجاع) في عمليات الاستغلال بحوالي 20٪.
تم تنفيذ التوزيع العشوائي لموقع الذاكرة من هياكل الكود C ، مما يعقد استخراج البيانات من الهياكل في حالة استغلال نقاط الضعف. يتم تشغيل العشوائية وإيقاف تشغيلها باستخدام سمات randomize_layout و no_randomize_layout ، وتتطلب تعيين البذور باستخدام علامة "-frandomize-layout-seed" أو "-frandomize-layout-seed-file" لضمان إنشاءات قابلة للتكرار.
من التغييرات الأخرى التي تبرز:
- القدرات الموسعة المتعلقة بدعم OpenCL و OpenMP. تمت إضافة دعم لملحق OpenCL cl_khr_subgroup_rotate.
- واجهات خلفية محسنة لهياكل x86 و PowerPC و RISC-V.
تم تحسين قدرات رابط LLD ومصحح أخطاء LLDB. - تمت إضافة "-fstrict-flex-arrays =" علم »التي يمكنك من خلالها التحكم في حدود عنصر مصفوفة ناعمة في الهياكل (أعضاء مصفوفة ناعمة ، مصفوفة ذات حجم غير محدد في نهاية البنية).
- تمت إضافة خيار "-warray-parameter" للتحذير من تجاوز الوظائف بإعلانات وسيطة غير متطابقة مرتبطة بمصفوفات ثابتة ومتغيرة الطول.
- التوافق المحسن مع MSVC.
- تمت إضافة دعم لـ "#pragma function و" #pragma custom_text "المتوفرة في MSVC.
- دعم إضافي لعلاميات JMC و / JMC المتوافقة مع MSVC.
- تمت إضافة علامة "-m [no-] rdpru" للتحكم في استخدام تعليمات RDPRU ، المدعومة من معالجات AMD Zen2.
- تمت إضافة علامة "-mfunction-return = thunk-extern" للحماية من ثغرة RETBLEED ، والتي تعمل عن طريق إضافة سلسلة من التعليمات التي تستبعد مشاركة آلية تنفيذ المضاربة للقفزات غير المباشرة.
أخيرا إذا كنت مهتمًا بمعرفة المزيد عنها ، يمكنك التحقق من التفاصيل في الرابط التالي.