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

بعد ستة أشهر من التطوير، تم إصدار LLVM 22.1.0. يُطوّر هذا المشروع أدوات (مترجمات، ومُحسِّنات، ومولدات أكواد) تُترجم البرامج إلى رمز وسيط ثنائي (bitcode) لتعليمات افتراضية شبيهة بـ RISC (آلة افتراضية منخفضة المستوى مزودة بنظام تحسين متعدد المستويات). يمكن تحويل الشفرة الزائفة المُولَّدة إلى شفرة الآلة لمنصة مُستهدفة مُحددة، أو استخدامها بواسطة مُترجم فوري (JIT) لتوليد تعليمات الآلة مباشرةً أثناء تنفيذ البرنامج. وبالاستناد إلى تقنيات LLVM، يُطوّر المشروع مُترجم Clang، الذي يدعم لغات البرمجة C وC++ وObjective-C. ابتداءً من الفرع 18.x، انتقل المشروع إلى نظام ترقيم جديد للإصدارات، حيث يُستخدم الإصدار 0 ("N.0") أثناء التطوير، ويُرقّم أول إصدار مستقر بالرقم "N.1".

تشمل التحسينات في Clang 22 ما يلي:

  • تمت إضافة دعم لرموز تخصيص الذاكرة (Allocation Tokens) لتمييز عمليات تخصيص الذاكرة التي تُنفذ باستخدام دوال مثل malloc بمعرف فريد. تتيح رموز التخصيص تنظيم معلومات الكومة، وتبسيط اكتشاف تسرب الذاكرة، وتمكين تجميع الكائنات بناءً على غرضها أو أنماط تعديلها (مثل فصل البيانات "الساخنة" عن البيانات "الباردة"). لتفعيلها، استخدم الخيار "-fsanitize=alloc-token".
  • الميزات المتعلقة بلغة C:
    • تمّ تطبيق مسودة مواصفات تُعرّف آلية التنفيذ المؤجل "defer"، مما يسمح بتنفيذ الإجراءات عند انتهاء النطاق الحالي. وقد أُضيفت علامة "-fdefer-ts" لتفعيل دعم "defer".
    • تمت إضافة الدالة المدمجة __builtin_stack_address()، وهي معادلة للدالة المماثلة في GCC. تُعيد هذه الدالة عنوان المكدس الذي يفصل منطقة المكدس للدالة الحالية التي استدعت __builtin_stack_address() عن الدوال اللاحقة التي تستدعيها.
  • القدرات التي يجري تطويرها لمعيار C2y المستقبلي:
    • تمت إضافة دعم للحلقات المسماة، مما يسمح لك بتسمية الحلقات وعبارات التبديل، والتي يمكن تحديدها في عبارات break وcontinue لتحديد الحلقة المراد الخروج منها بشكل صريح. مثال: `outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // الانتقال إلى CONT1 continue outer; // الانتقال إلى CONT2 // CONT1 } // CONT2 }`
    • تم توسيع نطاق استخدام الماكرو المدمج "__COUNTER__"، المصمم لإنشاء أسماء معرّفات فريدة، وإدراجه في المعيار. وقد تم تحديد حد أقصى لعدد مرات استدعاء هذا الماكرو بـ 2147483647 مرة؛ وسيؤدي تجاوز هذا الحد إلى ظهور خطأ.
    • تمت إزالة التحذير (-Wstatic-in-inline) عند استخدام الدوال الثابتة أو المتغيرات داخل الدوال المعلنة على أنها "extern inline".
  • القدرات المحددة في معيار C23 C:
    • يدعم ملف الرأس float.h الآن وحدات الماكرو FLT_SNAN و DBL_SNAN و LDBL_SNAN، والتي تنفذ قيم NaN المشار إليها (مسببة استثناء عند استخدامها في العمليات الحسابية) لأنواع float و double و long double.
    • تم إصلاح خطأ كان يتسبب في التعامل مع أنواع مختلفة غير مسماة على أنها متوافقة داخل وحدة الترجمة نفسها إذا كانت تحتوي على نفس الحقول.
    • تم توسيع علامة "-MG" المستخدمة لتجاهل ملفات الرأس المفقودة أثناء فحص التبعية لتشمل توجيهات "#embed" وتقوم الآن بقمع خطأ "الملف غير موجود" عندما يكون الملف المحدد في توجيه "#embed" مفقودًا.
  • الميزات المتعلقة بـ C++:
    • أُضيفت إمكانية استخدام الروابط المهيكلة في سياق "constexpr"، كما هو مُطور في مواصفات C++2c (C++26). هذا يعني أن المراجع إلى التعبيرات الثابتة يُمكن أن تكون تعبيرات ثابتة بحد ذاتها. يدعم هذا الإصدار المصفوفات والهياكل البسيطة (لا يدعم الصفوف بعد). مثال: `constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;`
    • كما هو مطلوب بموجب معيار C++20، يتم الآن تحويل القيود إلى شكل قياسي قبل التحقق منها، مما يسمح برسائل تشخيصية أكثر دقة ومعالجة مناسبة لأخطاء الاستبدال في وسيطات القوالب المستخدمة فقط في معرفات المفاهيم.
    • تمت إضافة مجموعة من الوظائف المضمنة "__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" للتحكم في تخطيط الذاكرة لأنواع المصفوفات (على سبيل المثال، column-major لـ column-major، و row-major لـ row-major).
  • تحتوي الدوال الآن على سمة "malloc_span"، وهي سمة مشابهة لسمة malloc ولكنها قابلة للتطبيق على الدوال التي تُرجع هياكل تشبه span تحتوي على مؤشر وحقل بحجم أو مؤشر إلى نهاية الكتلة.
  • تمت إضافة السمة "modular_format" لتحديد التنفيذ المرتبط بشكل ثابت المطلوب لوظيفة printf ديناميكيًا في وقت الربط.
  • تم توسيع أدوات التشخيص والتحليل الثابت، وتمت إضافة فحوصات جديدة (عشرات التحسينات المتعلقة بالتشخيص).
  • أُضيفت وظائف إضافية لتقنيات SSE وAVX وAVX512 إلى واجهة X86 الخلفية. كما أُضيفت أوضاع بناء لمعالجات Intel المبنية على معمارية Wildcat Lake (-march=wildcatlake) وNova Lake (-march=novalake).
  • يدعم نظام 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.

المصدر: opennet.ru

شراء استضافة موثوقة للمواقع مع حماية DDoS وخوادم VPS VDS 🔥 اشترِ استضافة مواقع ويب موثوقة مع حماية من هجمات DDoS، وخوادم VPS وVDS | ProHoster