تصف هذه الصفحة كيفية توسيع لغة البناء باستخدام وحدات ماكرو والقواعد.
إضافات Bazel هي ملفات تنتهي بـ .bzl
. يمكنك استخدام عبارة التحميل لاستيراد رمز من إحدى الإضافات.
قبل تعلُّم المفاهيم الأكثر تقدمًا، عليك أولاً:
يمكنك الاطّلاع على المزيد من المعلومات حول لغة Starlark، والتي يتم استخدامها في ملفَّي
BUILD
و.bzl
.تعرّف على كيفية مشاركة المتغيرات بين ملفين
BUILD
.
وحدات الماكرو والقواعد
الماكرو هي دالة تنشئ القواعد التي تنشئ قواعد. وهو مفيد عندما يصبح الملف BUILD
مكررًا أو معقّدًا جدًا، لأنه يسمح لك بإعادة استخدام بعض الرموز. يتم تقييم الدالة عند قراءة ملف BUILD
. بعد تقييم ملف BUILD
، لا يحتوي Bazel إلا على معلومات محدودة حول وحدات الماكرو:
إذا أنشأت وحدة الماكرو وحدة الماكرو genrule
، سيتصرف Bazel كما لو كنت كتبت
genrule
. ونتيجة لذلك، لن يدرج bazel query
إلا genrule
الذي تم إنشاؤه.
القاعدة أكثر فعالية من وحدة الماكرو. يمكنه الدخول إلى Bazel الداخلية والتحكم الكامل في ما يحدث. على سبيل المثال، قد يتم تمرير معلومات إلى قواعد أخرى.
إذا كنت تريد إعادة استخدام منطق بسيط، ابدأ بإعداد وحدة ماكرو. إذا أصبحت وحدة الماكرو معقّدة، من الأفضل غالبًا أن تجعلها قاعدة. يتم عادةً اعتماد لغة جديدة من خلال قاعدة. القواعد مخصصة للمستخدمين المتقدمين، ولن يحتاج معظم المستخدمين أبدًا إلى كتابتها. سيتم تحميل هذه القواعد واستدعاء القواعد الحالية فقط.
نموذج التقييم
يتكون الإصدار من ثلاث مراحل.
مرحلة التحميل أولاً، تحميل جميع الإضافات وتقييمها
BUILD
الملفات المطلوبة للإصدار. يؤدي تنفيذ ملفاتBUILD
إلى إنشاء القواعد بشكل فوري (في كل مرة يتم فيها استدعاء إحدى القواعد، تتم إضافتها إلى الرسم البياني). هذا هو مكان تقييم وحدات الماكرو.مرحلة التحليل. يتم تنفيذ رمز القواعد (وظيفة
implementation
)، ويتم إنشاء مثيلات من الإجراءات. يصف الإجراء كيفية إنشاء مجموعة من المخرجات من مجموعة من الإدخالات، مثل "run gcc on hello.c and get Hello.o". عليك سرد الملفات التي سيتم إنشاؤها صراحةً قبل تنفيذ الأوامر الفعلية. بمعنى آخر، تستغرق مرحلة التحليل الرسم البياني الذي تم إنشاؤه في مرحلة التحميل وتنشئ رسمًا بيانيًا للإجراء.مرحلة التنفيذ. يتم تنفيذ الإجراءات، عند الحاجة إلى واحد على الأقل من المخرجات. في حال كان أحد الملفات ناقصًا أو تعذّر على الأمر إنشاء نتيجة واحدة، يؤدي ذلك إلى تعذّر إنشاء الملف. ويتم أيضًا إجراء الاختبارات أثناء هذه المرحلة.
يستخدم Bazel التوازي لقراءة وتحليل ملفات .bzl
وBUILD
وملفاتها. تتم قراءة الملف مرة واحدة لكل إصدار على الأكثر، ويتم تخزين نتيجة التخزين المؤقت وإعادة استخدامها. ولا يتم تقييم أي ملف إلا بعد حل جميع مشاكل الاعتمادية (load()
) من حيث التصميم، فإن تحميل ملف .bzl
ليس له
تأثير جانبي مرئي، بل يحدِّد القيم والوظائف فقط.
يحاول بازيل أن يكون ذكيًا: يستخدم تحليل التبعية لمعرفة الملفات التي يجب تحميلها والقواعد التي يجب تحليلها والإجراءات التي يجب تنفيذها. على سبيل المثال، إذا أنشأت إحدى القواعد إجراءات لا تحتاج إليها في الإصدار الحالي، لن يتم تنفيذها.
جارٍ إنشاء الإضافات
أنشِئ وحدة الماكرو الأولى لإعادة استخدام بعض الرموز. بعد ذلك، يمكنك الاطّلاع على مزيد من المعلومات عن وحدات الماكرو واستخدامها لإنشاء "أفعال".
اتّبِع البرنامج التعليمي للقواعد لبدء استخدام القواعد. بعد ذلك، يمكنك الاطّلاع على المزيد من المعلومات عن مفاهيم القواعد.
سيكون الرابطان التاليان مفيدين جدًا عند كتابة الإضافات الخاصة بك. عليك الإبقاء عليها في متناول اليد:
المضي قدمًا
بالإضافة إلى وحدات الماكرو والقواعد، يمكنك كتابة العناصر وقواعد المستودع.
استخدِم Buildifier لتنسيق الرمز وتطويره.
اتّبِع دليل النمط
.bzl
.اختبار الرمز
أنشئ المستندات لمساعدة المستخدمين.
تحسين أداء الرمز.
نشر الإضافات لأشخاص آخرين.