إطلاق مجموعة مترجم LLVM 13.0

بعد ستة أشهر من التطوير، تم تقديم إصدار مشروع LLVM 13.0 - وهو عبارة عن مجموعة أدوات متوافقة مع دول مجلس التعاون الخليجي (المترجمون والمحسنون ومولدو الأكواد) التي تجمع البرامج في كود بت متوسط ​​لتعليمات افتراضية تشبه RISC (جهاز افتراضي منخفض المستوى مزود بـ نظام التحسين متعدد المستويات). يمكن تحويل الكود الكاذب الذي تم إنشاؤه باستخدام مترجم JIT إلى تعليمات الجهاز مباشرة في وقت تنفيذ البرنامج.

التحسينات في Clang 13.0:

  • تم تنفيذ الدعم للمكالمات الخلفية المضمونة (استدعاء روتين فرعي في نهاية الوظيفة، وتشكيل عود خلفي إذا استدعى الروتين الفرعي نفسه). يتم توفير الدعم للاستدعاءات الخلفية المضمونة من خلال السمة "[[clang::musttail]]" في C++ و"__attribute__((musttail))" في لغة C، المستخدمة في عبارة "return". تتيح لك هذه الميزة تنفيذ التحسينات من خلال نشر التعليمات البرمجية في تكرار ثابت لتوفير استهلاك المكدس.
  • توفر إعلانات "استخدام" وامتدادات clang الدعم لتعريف سمات نمط C++ 11 باستخدام التنسيق "[[]]".
  • تمت إضافة علامة "-Wreserved-identifier" لعرض تحذير عند تحديد معرفات محجوزة في رمز المستخدم.
  • تمت إضافة علامتي "-Wunused-but-set-parameter" و"-Wunused-but-set-variable" لعرض تحذير في حالة تعيين معلمة أو متغير ولكن لم يتم استخدامه.
  • تمت إضافة علامة "-Wnull-pointer-subtraction" لإصدار تحذير إذا كان الكود قد يقدم سلوكًا غير محدد بسبب استخدام مؤشر فارغ في عمليات الطرح.
  • تمت إضافة علامة "-fstack-usage" لإنشاء ملف ".su" إضافي لكل ملف تعليمات برمجية يحتوي على معلومات حول حجم إطارات المكدس لكل وظيفة محددة في الملف الذي تتم معالجته.
  • تمت إضافة نوع مخرجات جديد إلى المحلل الثابت - "sarif-html"، مما يؤدي إلى إنشاء تقارير في وقت واحد بتنسيقات HTML وSarif. تمت إضافة فحص allocClassWithName الجديد. عند تحديد خيار "-analyzer-display-progress"، يتم عرض وقت التحليل لكل وظيفة. محلل المؤشر الذكي (alpha.cplusplus.SmartPtr) جاهز تقريبًا.
  • تم توسيع الإمكانات المرتبطة بدعم OpenCL. تمت إضافة دعم للملحقات الجديدة cl_khr_integer_dot_product وcl_khr_extened_bit_ops و__cl_clang_bitfields و__cl_clang_non_portable_kernel_param_types. استمر تنفيذ مواصفات OpenCL 3.0. بالنسبة للغة C، يتم استخدام مواصفات OpenCL 1.2 افتراضيًا ما لم يتم تحديد إصدار آخر بشكل صريح. بالنسبة لـ C++، تمت إضافة دعم للملفات ذات الامتداد ".clcpp".
  • تم تنفيذ دعم توجيهات تحويل الحلقة ("#pragma omp unrol" و"#pragma omp Tile") المحددة في مواصفات OpenMP 5.1.
  • تمت إضافة خيارات إلى الأداة المساعدة لتنسيق clang: SpacesInLineCommentPrefix لتحديد عدد المسافات قبل التعليقات، وIndentAccessModifiers، وLambdaBodyIndentation، وPPIndentWidth للتحكم في محاذاة الإدخالات، وتعبيرات lambda، وتوجيهات المعالج المسبق. تم توسيع إمكانيات فرز تعداد ملفات الرأس (SortIncludes). تمت إضافة دعم لتنسيق ملفات JSON.
  • تمت إضافة جزء كبير من الشيكات الجديدة إلى linter clang-tidy.

الابتكارات الرئيسية في LLVM 13.0:

  • تمت إضافة خيار "-ehcontguard" لاستخدام تقنية CET (تقنية فرض تدفق التحكم في Windows) للحماية من تنفيذ عمليات استغلال تم إنشاؤها باستخدام تقنيات البرمجة الموجهة للعودة (ROP) في مرحلة معالجة الاستثناءات.
  • تمت إعادة تسمية مشروع اختبار debuginfo إلى اختبارات المشروعات المشتركة، وهو مصمم لاختبار المكونات من مشاريع مختلفة، ولا يقتصر على معلومات التصحيح.
  • يوفر نظام التجميع الدعم لبناء العديد من التوزيعات، على سبيل المثال، واحدة مع الأدوات المساعدة، والأخرى مع مكتبات للمطورين.
  • في الواجهة الخلفية لبنية AArch64، يتم تنفيذ دعم امتدادات Armv9-A RME (امتداد إدارة المجال) وSME (امتداد المصفوفة القابلة للتوسيع) في المجمع.
  • تمت إضافة دعم ISA V68/HVX إلى الواجهة الخلفية للبنية السداسية.
  • قامت الواجهة الخلفية x86 بتحسين الدعم لمعالجات AMD Zen 3.
  • تمت إضافة دعم لـ GFX1013 RDNA2 APU إلى الواجهة الخلفية لـ AMDGPU.
  • يستمر Libc++ في تنفيذ الميزات الجديدة لمعايير C++20 وC++2b، بما في ذلك استكمال مكتبة "المفاهيم". تمت إضافة دعم لنظام الملفات std::files لمنصة Windows المستندة إلى MinGW. تم فصل ملفات الرأس , و . تمت إضافة خيار البناء LIBCXX_ENABLE_INCOMPLETE_FEATURES لتعطيل ملفات الرأس ذات الوظائف غير المنفذة بالكامل.
  • تم توسيع إمكانيات رابط LLD، حيث يتم تنفيذ دعم معالجات Big-endian Aarch64، وتم إحضار الواجهة الخلفية Mach-O إلى حالة تسمح بربط البرامج العادية. وشملت التحسينات اللازمة لربط Glibc باستخدام LLD.
  • أضافت الأداة المساعدة llvm-mca (Machine Code Analyzer) دعمًا للمعالجات التي تنفذ التعليمات بالترتيب (خط الأنابيب السلمي الفائق بالترتيب)، مثل ARM Cortex-A55.
  • يوفر مصحح أخطاء LLDB للنظام الأساسي AArch64 دعمًا كاملاً لمصادقة المؤشر وMTE (MemTag وامتداد وضع علامات الذاكرة) وسجلات SVE. تمت إضافة أوامر تتيح لك ربط العلامات بكل عملية تخصيص للذاكرة وتنظيم فحص المؤشر عند الوصول إلى الذاكرة، والذي يجب أن يرتبط بالعلامة الصحيحة.
  • تمت إضافة مصحح أخطاء LLDB والواجهة الأمامية للغة Fortran - Flang إلى التجميعات الثنائية التي أنشأها المشروع.

المصدر: opennet.ru

إضافة تعليق