التجميع المشروط

في برمجة الحاسوب ، تُعدّ الترجمة الشرطية تقنية ترجمة تُنتج برامج تنفيذية مختلفة بناءً على معايير مُحددة. تُستخدم هذه التقنية عادةً عندما تكون هذه الاختلافات في البرنامج ضرورية لتشغيله على منصات مختلفة ، أو مع إصدارات مختلفة من المكتبات أو الأجهزة المطلوبة .

تدعم العديد من لغات البرمجة الترجمة الشرطية. عادةً ما تُعرّف توجيهات المُترجم أو تُزيل تعريف متغيرات معينة ؛ بينما تختبر توجيهات أخرى هذه المتغيرات وتُعدّل الترجمة وفقًا لذلك. على سبيل المثال، عند عدم استخدام لغة برمجة مُحددة، قد يُضبط المُترجم لتعريف "Macintosh" وإزالة تعريف "PC"، وقد يحتوي الكود على ما يلي:

(* كود عام للنظام *) إذا كان mac ! = Null ثم (* كود خاص بنظام macOS *) وإلا إذا كان pc ! = Null (* كود خاص بنظام Windows *)

في لغة C وبعض اللغات ذات التركيب المماثل، يتم ذلك باستخدام توجيه '#ifdef' .

يستخدم متصفح مايكروسوفت إنترنت إكسبلورر، من الإصدار 5 إلى 9، إجراءً مشابهاً يُعرف باسم "التعليق الشرطي" لتفسير كود HTML . كما توجد آلية خاصة مماثلة لإضافة التعليقات الشرطية داخل جافا سكريبت ، تُعرف باسم التجميع الشرطي. [ 1 ]

أمثلة

توفر لغة C# توجيهات المعالجة المسبقة للتجميع الشرطي. [ 2 ]

#if DEBUG Console.WriteLine ( " إصدار التصحيح" ); #endif

يدعم Rust الترجمة الشرطية. [ 3 ]

#[cfg_attr(target_os = "linux" , path = "linux.rs" )] #[cfg_attr(windows, path = "windows.rs" )] mod os ;

نقد

عندما يعتمد التجميع الشرطي على عدد كبير جدًا من المتغيرات، قد يصبح فهم الكود أكثر صعوبة نظرًا لتزايد عدد التوليفات الممكنة للتكوين بشكل كبير. [ 4 ] [ 5 ] [ 6 ] وعندما يتم التجميع الشرطي عبر معالج مسبق لا يضمن مخرجات صحيحة نحويًا في لغة المصدر، مثل المعالج المسبق للغة C ، فقد يؤدي ذلك إلى أخطاء تجميع يصعب تصحيحها، [ 7 ] [ 8 ] [ 9 ] وهو ما يُعرف أحيانًا باسم "جحيم #ifdef". [ 10 ] [ 11 ]

مراجع

  1. "التجميع المشروط" . شركة مايكروسوفت. مؤرشف من الأصل بتاريخ 2008-09-06 . تم الاطلاع عليه بتاريخ 2011-11-27 .
  2. "توجيهات المعالج المسبق - مرجع لغة C#" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 31 مايو 2025 .
  3. "التجميع الشرطي - مرجع لغة رست" . doc.rust-lang.org . تم الاطلاع عليه بتاريخ 31 مايو 2025 .
  4. غازيلو، بول؛ وي، شيي (27-05-2019). "انتهى عصر الترجمة الشرطية، فليحيا عصر الترجمة الشرطية!" (ملف PDF) . وقائع المؤتمر الدولي الحادي والأربعين لهندسة البرمجيات: أفكار جديدة ونتائج ناشئة (ICSE-NIER '19). المؤتمر الدولي الحادي والأربعون لهندسة البرمجيات: أفكار جديدة ونتائج ناشئة (ICSE-NIER) لعام 2019، IEEE/ACM. مونتريال، كيبيك، كندا: مطبعة IEEE. الصفحات 105-108 . doi : 10.1109/ICSE-NIER.2019.00035 . ISBN  978-1-7281-1758-4تمت أرشفة الملف (PDF) من النسخة الأصلية بتاريخ 7 نوفمبر 2022. تم الاطلاع عليه بتاريخ 21 يناير 2023 .
  5. ^ مينيكي، ينس؛ توم، توماس. شروتر، ريمار. بندوهن، فابيان؛ ليش، توماس. ساكي ، غونتر (2017). مينيكي، ينس؛ توم، توماس. شروتر، ريمار. بندوهن، فابيان (محرران). ضمان الجودة للتجميع المشروط . شام: سبرينغر الدولية للنشر. ص 131 – 139. دوى : 10.1007 / 978-3-319-61443-4_12 . رقم ISBN  978-3-319-61443-4تم الاطلاع عليه بتاريخ 21 يناير 2023 .{{cite book}}تم |work=تجاهله ( مساعدة )
  6. "المترجم - كيف يؤثر التجميع الشرطي على جودة المنتج وأمانه وتعقيد الكود؟" . موقع تبادل المعلومات في هندسة البرمجيات . تم الاطلاع عليه بتاريخ 21 يناير 2023 .
  7. لي، دوك؛ ووكنغشو، إريك؛ إرويغ، مارتن (18-09-2011). "#ifdef ضار بشكل مؤكد: تعزيز التباين البرمجي المفهوم". ندوة IEEE لعام 2011 حول اللغات المرئية والحوسبة المتمحورة حول الإنسان (VL/HCC) . الصفحات 143-150 . doi : 10.1109/VLHCC.2011.6070391 . ISBN  978-1-4577-1246-3.
  8. "التجميع الشرطي - لماذا يجب تجنب استخدام #ifdef في ملفات .c؟" . Stack Overflow . تم الاطلاع عليه بتاريخ 21-01-2023 .
  9. "c++ - نصائح وإرشادات حول الترجمة الشرطية" . موقع Stack Overflow . تم الاطلاع عليه بتاريخ 21 يناير 2023 .
  10. بريشيرن، كريستوفر (2019-07-03). "أنماط للهروب من جحيم #ifdef". وقائع المؤتمر الأوروبي الرابع والعشرين حول لغات أنماط البرامج (ملف PDF) . نيويورك، نيويورك، الولايات المتحدة الأمريكية: رابطة آلات الحوسبة. الصفحات 1-12 . doi : 10.1145/3361149.3361151 . ISBN  978-1-4503-6206-1تمت أرشفة الملف (PDF) من النسخة الأصلية بتاريخ 21-12-2022.
  11. "العيش في جحيم #ifdef" . www.cqse.eu. 28 أكتوبر 2015. مؤرشف من الأصل بتاريخ 28 نوفمبر 2022. تم الاطلاع عليه بتاريخ 21 يناير 2023 .