بعد ستة أشهر من التطوير، تم تقديم إصدار مشروع LLVM 13.0 - وهو عبارة عن مجموعة أدوات متوافقة مع دول مجلس التعاون الخليجي (المترجمون والمحسنون ومولدو الأكواد) التي تجمع البرامج في كود بت متوسط لتعليمات افتراضية تشبه RISC (جهاز افتراضي منخفض المستوى مزود بـ نظام التحسين متعدد المستويات). يمكن تحويل الكود الكاذب الذي تم إنشاؤه باستخدام مترجم JIT إلى تعليمات الجهاز مباشرة في وقت تنفيذ البرنامج.
التحسينات في Clang 13.0:
- تم تنفيذ دعم مكالمات الذيل المضمونة (استدعاء برنامج فرعي في نهاية الوظيفة، مما ينشئ تكرارًا ذيليًا إذا قام البرنامج الفرعي باستدعاء نفسه). يتم توفير الدعم لمكالمات الذيل المضمونة بواسطة السمة "[[clang::musttail]]" في C++ و"__attribute__((musttail))" في C، المستخدمة في تعبير "return". تتيح الميزة تنفيذ التحسينات عن طريق نشر الكود في تكرار مسطح لتوفير مساحة المكدس.
- يتم الآن دعم تعريفات السمات على غرار C++11 في إعلانات clang "using" والامتدادات، باستخدام تنسيق "[[]]".
- تمت إضافة علامة "-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_extended_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-format بالخيارات: SpacesInLineCommentPrefix للتحكم في عدد المسافات قبل التعليقات، وIndentAccessModifiers، وLambdaBodyIndentation، وPPIndentWidth للتحكم في محاذاة السجلات، وتعبيرات lambda، وتوجيهات المعالج المسبق. تم توسيع إمكانيات الفرز لإدراج ملفات الرأس (SortIncludes). تمت إضافة الدعم لتنسيق ملفات JSON.
- تمت إضافة دفعة كبيرة من الشيكات الجديدة إلى Linter clang-tidy.
الابتكارات الرئيسية في LLVM 13.0:
- Добавлена опция «-ehcontguard» для использования технологии CET (Windows Control-flow Enforcement Technology) для защиты на этапе обработки исключений от выполнения эксплоитов, построенных с использованием приёмов возвратно-ориентированного программирования (ROP, Return-Oriented Programming).
- تمت إعادة تسمية مشروع debuginfo-test إلى cross-project-tests وهو مصمم لاختبار المكونات من مشاريع مختلفة، وليس مقتصرًا على معلومات التصحيح.
- يوفر نظام البناء الدعم لبناء توزيعات متعددة، على سبيل المثال، واحدة مع أدوات مساعدة والأخرى مع مكتبات للمطورين.
- ينفذ الجزء الخلفي لهندسة AArch64 دعمًا لإضافات Armv9-A RME (امتداد إدارة العالم) وSME (امتداد المصفوفة القابلة للتطوير) في المجمع.
- تمت إضافة دعم ISA V68/HVX إلى الواجهة الخلفية لهندسة Hexagon.
- تم تحسين دعم الواجهة الخلفية x86 لمعالجات AMD Zen 3.
- تمت إضافة الدعم لـ GFX1013 RDNA2 APU إلى الواجهة الخلفية لـ AMDGPU.
- В Libc++ продолжена реализация новых возможностей стандартов C++20 и C++2b, в том числе завершена реализация библиотеки «concepts». Для платформы Windows на базе MinGW добавлена поддержка std::filesystem. Разделены заголовочные файлы <algorithm>, <iterator> и <utility>. Добавлена сборочная опция LIBCXX_ENABLE_INCOMPLETE_FEATURES для отключения заголовочных файлов с не полностью реализованной функциональностью.
- تم توسيع قدرات رابط LLD، مع دعم معالجات Aarch64 ذات النهاية الكبيرة، وتم جلب الواجهة الخلفية Mach-O إلى حالة تسمح بربط البرامج العادية. تم تضمين التحسينات اللازمة لربط Glibc باستخدام LLD.
- تم تحديث الأداة المساعدة llvm-mca (محلل الكود الآلي) لدعم معالجات خطوط الأنابيب الفائقة الترتيب مثل ARM Cortex-A55.
- يتمتع مصحح أخطاء LLDB لمنصة AArch64 بدعم كامل لمصادقة المؤشر، وامتداد وسم الذاكرة (MemTag)، وسجلات SVE. تمت إضافة أوامر لربط العلامات بكل عملية تخصيص للذاكرة والتحقق من المؤشر عند الوصول إلى الذاكرة، والتي يجب ربطها بالعلامة الصحيحة.
- تمت إضافة مصحح أخطاء LLDB وواجهة Fortran الأمامية Flang إلى التجميعات الثنائية التي تم إنشاؤها بواسطة المشروع.
المصدر: opennet.ru
