بیزل (نرم‌افزار)

[بندانگشتی|[:en:Programmer|توسعه دهندگان              گوگل                                                     انتشار اولیه                         مارس 20015، 9 سال پیش                     انتشار پایدار                    13 روز پیش، 7.2.1 / 25 June 2024        مخزن                                 github.com/bazelbuild/bazel                                                                     نوشته شده در                     جاوا                                                             سیستم عامل                      نرم افزار چندسکویی                                                لایسنس                             پلتفرم آپاچی                                                 وبسایت                             bazel.build                                                                                                                                                     ]]
**بیزل** (/ˈbeɪzəl/) یک ابزار نرم‌افزاری آزاد و متن‌باز است که برای خودکارسازی ساخت و تست نرم‌افزار استفاده می‌شود. گوگل به طور داخلی از ابزار ساخت Blaze استفاده می‌کند و نسخه متن‌بازی از ابزار Blaze را با نام Bazel منتشر کرده است که یک جابه‌جایی حروف از Blaze است. Bazel برای اولین بار در مارس 2015 منتشر شد و تا سپتامبر 2015 به نسخه بتا رسید. نسخه 1.0 در اکتبر 2019 منتشر شد.

مشابه ابزارهای ساخت مانند ساخت( نرم افزار)، Apache Ant و آپاچی ماون،  بیزل نرم‌افزارها را از کد منبع با استفاده از قواعد می‌سازد. قواعد و ماکروها در زبان Starlark (قبلاً به نام Skylark) ایجاد می‌شوند، که یک گویش از زبان پایتون است.  قواعد داخلی برای ساخت نرم‌افزارهایی که با زبان‌های جاوا، کاتلین، اسکالا، سی، سی پلاس پلاس، گو، پایتون، راست، جاوا اسکریپت، آبجکتیو-سی و اسکریپت‌های بش نوشته شده‌اند، وجود دارد. بیزل می‌تواند بسته‌های نرم‌افزاری مناسبی برای استقرار در سیستم‌عامل‌های اندرویذ و آی او اس تولید کند.

## دلایل استفاده
یکی از اهداف بیزل، ایجاد یک سیستم ساخت است که ورودی‌ها و خروجی‌های اهداف ساخت به طور کامل مشخص شده باشد.

### زبان استارلاک
Bazel با زبان برنامه‌نویسی سفارشی Starlark خود قابل توسعه است. Starlark از نحوی استفاده می‌کند که زیرمجموعه‌ای از نحو زبان برنامه‌نویسی Python است. با این حال، بسیاری از ویژگی‌های زبان Python مانند توانایی تغییر مجموعه‌ها یا دسترسی به ورودی/خروجی فایل را پیاده‌سازی نمی‌کند تا از افزونه‌هایی که می‌توانند اثرات جانبی ایجاد کنند یا خروجی‌های ساختی که برای سیستم ساخت ناشناخته است را ایجاد کنند، جلوگیری کند. چنین اثرات جانبی می‌تواند به تحلیل نادرست نمودار وابستگی ساخت منجر شود.

Bazel به عنوان یک سیستم ساخت چندزبانه طراحی شده است. بسیاری از سیستم‌های ساخت معمولاً با ترجیح به یک زبان برنامه‌نویسی خاص طراحی شده‌اند. مثال‌هایی از چنین سیستم‌هایی شامل Ant و Maven برای جاوا، Leiningen برای Clojure ، و sbt برای اسکالا و غیره است. در یک پروژه چندزبانه، ترکیب سیستم‌های ساخت جداگانه و دستیابی به سرعت و دقت ساخت مورد نیاز می‌تواند دشوار و مشکل‌ساز باشد.sbt Leiningen

سیستم‌های ساخت مشابه به بیزل شامل Pants، Buck و Please هستند. Pants و Buck هر دو اهداف طراحی فنی مشابهی با Bazel دارند و Pants از سیستم ساخت Blaze که به‌طور داخلی در گوگل استفاده می‌شود، الهام گرفته است. Blaze همچنین پیشرو Bazel است. Bazel، Pants، Buck و Please همگی Starlark را به عنوان تجزیه‌گر فایل BUILD پذیرفته‌اند که با نحوه نوشتار فایل BUILD مطابقت دارد. سیستم‌های ساختی که به طور مستقل توسعه یافته‌اند و اهداف مشابهی در تحلیل کارآمد نمودار وابستگی‌ها و ردیابی خودکار آثار ساخت دارند، در سیستم‌های ساختی مانند tup پیاده‌سازی شده‌اند.

## سندباکس
یکی از ویژگی‌های کلیدی که بیزل و سیستم‌های مشابه را از سیستم‌های ساخت قدیمی‌تر متمایز می‌کند، استفاده از جعبه شنی(توسعه نرم افزار) برای مراحل کامپایل است. هنگامی که Bazel یک کامپایل جداگانه انجام می‌دهد، یک دایرکتوری جدید ایجاد می‌کند و آن را با پیوندهای نمادین به وابستگی‌های ورودی صریح برای قانون پر می‌کند. برای زبان‌هایی مانند C/C++، این ویژگی یک شبکه ایمنی قابل توجه برای گنجاندن فایل‌های سرآیند فراهم می‌کند: این اطمینان حاصل می‌شود که توسعه‌دهنده از فایل‌هایی که در کامپایل استفاده می‌شوند آگاه است و از گنجاندن ناخواسته یک فایل سرآیند با نام مشابه از یک دایرکتوری دیگر جلوگیری می‌کند.

این رویکرد سندباکس منجر به مشکلاتی با ابزارهای ساخت معمول می‌شود، که نیاز به تعداد زیادی از راه‌حل‌های موقتی برای کامپایل صحیح کد در معماری‌های مختلف دارد. به عنوان مثال، هنگام انجام کامپایل جداگانه برای معماری‌های Mac/Darwin، کامپایلر مسیرهای ورودی را در نمادهای SO و OSO در باینری Mach-O می‌نویسد، که می‌توان آن‌ها را با دستوری مانند `'''nm -a mybinary | grep SO'''` مشاهده کرد. این مسیرها برای یافتن نمادها در طول عیب‌یابی مورد نیاز هستند. در نتیجه، ساخت‌ها در Bazel باید اشیاء کامپایل شده را پس از واقعیت اصلاح کنند، و سعی در اصلاح مشکلات مربوط به مسیر که از ساخت سندباکس ناشی شده‌اند، با استفاده از فلگ‌هایی مانند `'''-fdebug-prefix-map'''` و `'''-oso_prefix'''` دارند که دومی در Xcode 11.0 در دسترس قرار گرفته است. رفتار مشابهی باید در مراحل پیوند‌دهی صورت گیرد، که مقادیر rpath را در کتابخانه‌های اشیاء مشترک با دستوری مانند `'''install_name_tool'''` بازنویسی می‌کند.

## لوگوی بیزل
از زمان انتشار اولیه Bazel، لوگوی آن یک حرف سبز "b" بود که به شکل ساقه یک گیاه ریحان با دو برگ طراحی شده بود. در تاریخ ۵ ژوئیه ۲۰۱۷، بلاگ Bazel یک لوگوی جدید را معرفی کرد که شامل سه بلوک سبز ساختمانی است که به شکل یک قلب چیده شده‌اند.

## همچنین ببینید

* List of build automation software
*Monorepo                [بندانگشتی|113x113پیکسل|[:en:Portal:Computer programming|Computer                                                           programming                                                                           portal]]

## منابع

رده:خودکارسازی ساخت
رده:ابزارهای مرتبط با کامپایل کردن
رده:نرم‌افزارهای گوگل
رده:نرم‌افزارهایی که از پروانه آپاچی استفاده می‌کنند