نمای کلی برنامه افزودنی

در این صفحه نحوه گسترش زبان BUILD با استفاده از ماکروها و قوانین توضیح داده شده است.

پسوندهای Bazel فایل هایی هستند که به .bzl می شوند. برای وارد کردن نماد از یک برنامه افزودنی از یک دستور بار استفاده کنید.

قبل از یادگیری مفاهیم پیشرفته تر، ابتدا:

  • در مورد زبان Starlark که در فایل های BUILD و .bzl استفاده می شود، بخوانید.

  • یاد بگیرید که چگونه می توانید متغیرها را بین دو فایل BUILD به اشتراک بگذارید.

ماکروها و قوانین

ماکرو تابعی است که قوانین را نمونه‌سازی می‌کند. هنگامی که یک فایل BUILD بیش از حد تکراری یا پیچیده می شود مفید است، زیرا به شما امکان می دهد از مقداری کد مجددا استفاده کنید. عملکرد به محض خواندن فایل BUILD ارزیابی می شود. پس از ارزیابی فایل BUILD ، Bazel اطلاعات کمی در مورد ماکروها دارد: اگر ماکرو شما یک ژانر تولید کند، genrule رفتار می کند که انگار شما genrule را نوشته اید. در نتیجه، bazel query genrule فقط ژانر تولید شده را فهرست می کند.

یک قانون قدرتمندتر از یک کلان است. می‌تواند به بخش‌های داخلی Bazel دسترسی داشته باشد و کنترل کاملی بر آنچه در جریان است داشته باشد. برای مثال ممکن است اطلاعات را به قوانین دیگر منتقل کند.

اگر می خواهید از منطق ساده استفاده مجدد کنید، با یک ماکرو شروع کنید. اگر یک کلان پیچیده شود، اغلب ایده خوبی است که آن را به یک قانون تبدیل کنید. پشتیبانی از یک زبان جدید معمولاً با یک قانون انجام می شود. قوانین برای کاربران پیشرفته هستند و اکثر کاربران هرگز مجبور به نوشتن آن نیستند. آنها فقط قوانین موجود را بارگیری و فراخوانی می کنند.

مدل ارزشیابی

یک ساخت شامل سه فاز است.

  • فاز بارگذاری ابتدا، تمامی پسوندها و تمامی فایل های BUILD را که برای ساخت مورد نیاز هستند، بارگیری و ارزیابی کنید. اجرای فایل های BUILD به سادگی قواعد را نمونه سازی می کند (هر بار که یک قانون فراخوانی می شود، به یک نمودار اضافه می شود). اینجاست که ماکروها ارزیابی می شوند.

  • فاز تحلیل . کد قوانین اجرا می شود (عملکرد implementation آنها) و اقدامات نمونه سازی می شوند. یک عمل نحوه تولید مجموعه‌ای از خروجی‌ها از مجموعه‌ای از ورودی‌ها را شرح می‌دهد، مانند "gcc را در hello.c اجرا کنید و hello.o را دریافت کنید". قبل از اجرای دستورات واقعی باید به صراحت فهرست کنید که کدام فایل ها تولید می شوند. به عبارت دیگر، مرحله تجزیه و تحلیل گراف تولید شده توسط فاز بارگذاری را می گیرد و یک نمودار عمل تولید می کند.

  • مرحله اجرا . اقدامات زمانی اجرا می شوند که حداقل یکی از خروجی های آنها مورد نیاز باشد. اگر یک فایل گم شده باشد یا اگر دستوری نتواند یک خروجی تولید کند، ساخت با شکست مواجه می شود. تست ها نیز در این مرحله اجرا می شوند.

Bazel از موازی سازی برای خواندن، تجزیه و ارزیابی فایل های .bzl و فایل های BUILD استفاده می کند. یک فایل حداکثر یک بار در هر ساخت خوانده می شود و نتیجه ارزیابی ذخیره می شود و مجددا استفاده می شود. یک فایل تنها زمانی ارزیابی می شود که تمام وابستگی های آن (گزاره های load() ) حل شود. با طراحی، بارگذاری یک فایل .bzl . هیچ عارضه جانبی قابل مشاهده ای ندارد، فقط مقادیر و توابع را تعریف می کند.

بازل سعی می کند هوشمندانه عمل کند: از تجزیه و تحلیل وابستگی استفاده می کند تا بداند کدام فایل ها باید بارگذاری شوند، کدام قوانین باید تجزیه و تحلیل شوند و کدام اقدامات باید اجرا شوند. به عنوان مثال، اگر یک قانون اقداماتی را ایجاد کند که برای ساخت فعلی نیازی ندارید، آنها اجرا نخواهند شد.

ایجاد پسوند

دو لینک زیر هنگام نوشتن افزونه های خود بسیار مفید خواهند بود. آنها را در دسترس نگه دارید:

جلوتر رفتن

علاوه بر ماکروها و قوانین ، ممکن است بخواهید جنبه ها و قوانین مخزن را نیز بنویسید.