إصدار Unity

في هندسة البرمجيات ، يعد بناء الوحدة (المعروف أيضًا باسم البناء الموحد أو البناء الضخم أو بناء الكتلة ) طريقة تستخدم في تطوير برامج C و C++ لتسريع تجميع المشاريع من خلال دمج وحدات ترجمة متعددة في وحدة واحدة، ويتم تحقيق ذلك عادةً باستخدام توجيهات التضمين لتجميع ملفات مصدر متعددة في ملف واحد أكبر.

تطبيق

إذا كانت هناك وحدتا ترجمة مختلفتان في الملف FileA.cpp :

#include "Header.hpp"// محتوى ملف المصدر A ...

و FileB.cpp :

#include "Header.hpp"// محتوى ملف المصدر B ...

في نفس المشروع، يتضمن كلا الملفين ملف الترويسة Header.hpp ، وسيتم معالجة هذا الملف مرتين بواسطة سلسلة المُصرّف، مرة لكل مهمة بناء. إذا تم دمج وحدتي الترجمة في ملف مصدر واحد JumboFile.cpp :

#include "FileA.cpp" #include "FileB.cpp"

عندئذٍ ، ستتم معالجة ملف Header.hpp مرة واحدة فقط (بفضل حراس التضمين ) عند تجميع ملف JumboFile.cpp . [ 1 ]

الآثار

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

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

قد تُؤثر عمليات بناء Unity أيضًا بشكلٍ خطير على دلالات البرامج. فبعض بنيات C++ الصحيحة التي تعتمد على الربط الداخلي قد تفشل في بيئة Unity، على سبيل المثال، تعارض الرموز الثابتة مع الرموز المُعرّفة في مساحات أسماء مجهولة تحمل نفس المعرّف في ملفات مختلفة. إذا عرّفت ملفات C++ مختلفة دوالًا مختلفة بنفس الاسم، فقد يُعالج المُصرّف التحميل الزائد بشكلٍ غير متوقع عن طريق اختيار الدالة الخاطئة، وهو أمر لم يكن ممكنًا عند تصميم البرنامج باستخدام الملفات كوحدات ترجمة مختلفة. ومن الآثار السلبية الأخرى احتمال تسريب تعريفات الماكرو عبر ملفات المصدر المختلفة. [ 2 ]

دعم نظام البناء

توفر بعض أنظمة البناء دعمًا مدمجًا لعمليات البناء الآلية لـ Unity، بما في ذلك Visual Studio ، [ 3 ] Meson ، [ 4 ] CMake . [ 5 ] و xmake.

مراجع

  1. كوبوتا وآخرون (2019)
  2. كيريلوف، فيكتور (7 يوليو 2018). "دليل لبناء الوحدة" . مؤرشف من الأصل في 12 نوفمبر 2020.
  3. أولغا أرخيبوفا (2 يوليو 2018). "دعم ملفات Unity (Jumbo) في Visual Studio 2017 15.8 (تجريبي)" . مايكروسوفت.
  4. "Unity builds" .
  5. "UNITY_BUILD - CMake 3.17.0 Documentation" .
  • كوبوتا، تاكافومي؛ يوسوكي، سوزوكي؛ وكينجي كونو (2019). التوحيد أم عدم التوحيد: دراسة حالة حول عمليات البناء الموحدة (في WebKit) . وقائع المؤتمر الدولي الثامن والعشرين حول بناء المترجمات. doi : 10.1145/3302516.3307347 .