بناء الوحدة
المحتويات
تعريفًا بالموضوع، في هندسة البرمجيات، بناء الوحدة (المعروف كذلك باسم البناء الموحد أو بناء الجامبو) هي طريقة مستعملة في تطوير برامج سي وسي++ لتسريع تجميع المشاريع من خلال الجمع بين وحدات الترجمة المتعددة في وحدة واحدة، وعادة ما يتم تحقيقها باستخدام توجيهات التضمين لتجميع ملفات مصدر متعددة في ملف واحد أكبر. ونتناول فيما يلي مزيدًا من التفاصيل.
تأثيرات
وعلى صعيد آخر، إن لبنى الوحدة تأثيرات خطيرة محتملة على دلالات البرامج. قد تفشل بعض تراكيب سي++ الصالحة التي تعتمد على الارتباط الداخلي في بناء الوحدة، مثلًا، اشتباكات الرموز الثابتة والرموز المحددة في مساحات أسماء مجهولة الهوية مع نفس المعرف في ملفات مختلفة. إذا حددت ملفات سي++ مختلفة وظائف مختلفة بنفس الاسم، فقد يحل المترجم بشكل غير متوقع التحميل الزائد عن طريق تحديد وظيفة خاطئة، بطريقة غير ممكنة عند تصميم البرنامج مع الملفات كوحدات ترجمة مختلفة. التأثير السلبي الآخر هو التسرب المحتمل لتعريفات الماكرو عبر ملفات المصدر المختلفة.
كذلك، تتمثل الفائدة الرئيسية لبناء الوحدات في تقليل الجهد المكرر في تحليل وتجميع محتوى العناوين التي يتم تضمينها في أكثر من ملف مصدر واحد. عادة ما يمثل محتوى العنوان غالبية التعليمات البرمجية في ملف مصدر بعد المعالجة المسبقة. تعمل وحدات البناء كذلك على التخفيف من التكلفة غير المباشرة الزائدة نظرًا لوجود عدد كبير من الملفات ذات المصدر الصغير عن طريق تقليل عدد ملفات الكائنات التي تم إنشاؤها ومعالجتها بواسطة سلسلة التجميع، وتسمح بالتحليل التعبيري والتحسين عبر الملفات التي تشكل مهمة بناء الوحدة (على غرار آثار تحسين وقت الارتباط). إنها تسهل كذلك اكتشاف انتهاكات قاعدة التعريف الواحد، لأنه إذا تم تعريف الرمز مرتين في ملفات مصدر مختلفة في نفس بنية الوحدة، فسيكون المترجم قادرًا على تحديد إعادة التعريف وانبعاث تحذير أو خطأ.
وعلى صعيد آخر، من عيوب بناء الوحدة وجود ذاكرة أكبر بسبب وحدات الترجمة الأكبر. يمكن أن تؤثر وحدات الترجمة الأكبر كذلك بشكل سلبي على البنى المتوازية، نظرًا لأن عددًا صغيرًا من وظائف الترجمة الكبيرة يكون من الصعب أو المستحيل جدولة إشباع جميع موارد الحوسبة المتوازية المتاحة بشكل فعال. يمكن لبنيات الوحدة كذلك أن تنكر جزءًا من مزايا البنيات الإضافية، التي تعتمد على إعادة بناء أقل قدر ممكن من التعليمات البرمجية، أي وحدات الترجمة المتأثرة بالتغييرات منذ آخر بناء.
بناء دعم النظام
في هذا الإطار، توفر بعض أنظمة البناء دعمًا مدمجًا لبناء الوحدات المؤتمت، بما في ذلك مايكروسوفت فيجوال ستوديو، وMeson، وCMake.
تنفيذ
وعلى صعيد آخر، #include "file_b.cc"ثم سيتم معالجة header.h مرة واحدة فقط (بفضل تضمين الحراس) عند تجميع jumbo_file.cc.
وفي هذا الصدد، // content of source file B ...في نفس المشروع كلاهما يشمل عنوانheader.h، ستتم معالجة هذا العنوان مرتين بواسطة سلسلة المترجم، مرة واحدة لكل مهمة بناء. إذا تم دمج وحدتي الترجمة في ملف مصدر واحد jumbo_file.cc#include "file_a.cc"
وفي هذا السياق، // content of source file A ...وfile_b.cc#include "header.h"
في هذا الإطار، إذا كانت هناك وحدتان ترجمة مختلفتان file_a.cc#include "header.h"
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟