Bazel का रोडमैप

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Bazel को आपकी ज़रूरतों के हिसाब से लगातार बेहतर बनाया जा रहा है. इसलिए, हम 2025 के लिए रोडमैप का अपडेट शेयर करना चाहते हैं.

हमारा प्लान है कि हम 2025 के आखिर में, आपको Bazel 9.0 का लंबे समय तक सहायता (एलटीएस) वाला वर्शन उपलब्ध कराएंगे.

Bzlmod पर पूरा ट्रांज़िशन

Bazel 7 से, Bzlmod, Bazel में बाहरी डिपेंडेंसी का स्टैंडर्ड सिस्टम है. यह लेगसी WORKSPACE सिस्टम की जगह लेता है. मार्च 2025 तक, Bazel Central Registry में 650 से ज़्यादा मॉड्यूल होस्ट किए जा रहे हैं.

Bazel 9 में, हम WORKSPACE फ़ंक्शन को पूरी तरह हटा देंगे. साथ ही, Bazel में बाहरी डिपेंडेंसी जोड़ने का एकमात्र तरीका Bzlmod होगा. कम्यूनिटी के लिए, माइग्रेशन की लागत को कम करने के लिए, हम माइग्रेशन की गाइड और टूल को और बेहतर बनाने पर फ़ोकस करेंगे.

इसके अलावा, हमारा मकसद बेहतर शेयर किए गए रिपॉज़िटरी कैश मेमोरी (#12227 देखें) को लागू करना है. इसमें, गै़रबेज कलेक्शन की सुविधा भी शामिल होगी. साथ ही, इसे Bazel 8 में भी उपलब्ध कराया जा सकता है. Bazel Central रजिस्ट्री में, एसएलएसए की पुष्टि करने की सुविधा भी उपलब्ध होगी.

Android, C++, Java, Python, और Proto नियमों को माइग्रेट करना

Bazel 8 में, हमने Android, Java, Python, और Proto के नियमों के लिए, Bazel कोडबेस से जुड़ी सहायता को उनकी संबंधित रिपॉज़िटरी में Starlark नियमों में माइग्रेट कर दिया है. माइग्रेशन को आसान बनाने के लिए, हमने Bazel में ऑटोलोड की सुविधाएं लागू की हैं. इन्हें --incompatible_autoload_externally और --incompatible_disable_autoloads_in_main_repo फ़्लैग की मदद से कंट्रोल किया जा सकता है.

हमारा मकसद Bazel 9 में, डिफ़ॉल्ट रूप से ऑटोलोड की सुविधा बंद करना है. साथ ही, हर प्रोजेक्ट के लिए यह ज़रूरी है कि वह BUILD फ़ाइलों में ज़रूरी नियमों को साफ़ तौर पर लोड करे.

हम C++ भाषा के लिए उपलब्ध ज़्यादातर सुविधाओं को Starlark में फिर से लिखेंगे. साथ ही, उन्हें Bazel बाइनरी से अलग करके, /rules_cc रिपॉज़िटरी में ले जाएंगे. यह भाषा, Bazel में अब भी काम करने वाली मुख्य भाषाओं में से एक है.

हम C++, Java, और Proto नियमों के लिए यूनिट टेस्ट को Starlark में भी पोर्ट कर रहे हैं. साथ ही, उन्हें लागू करने के बाद, उन्हें रिपॉज़िटरी में ले जा रहे हैं, ताकि नियम बनाने वाले लोगों की रफ़्तार बढ़ाई जा सके.

Starlark में किए गए सुधार

Bazel, सिंबल वाले मैक्रो का आकलन धीरे-धीरे करेगा. इसका मतलब है कि अगर किसी सिंबल मैक्रो में बताए गए टारगेट का अनुरोध नहीं किया जाता है, तो वह मैक्रो नहीं चलेगा. इससे बहुत बड़े पैकेज की परफ़ॉर्मेंस बेहतर होती है.

Starlark में, एक्सपेरिमेंट के तौर पर टाइप सिस्टम होगा. यह Python के टाइप एनोटेशन जैसा ही होगा. हमें उम्मीद है कि Bazel 9 लॉन्च होने के बाद, टाइप सिस्टम स्थिर हो जाएगा.

कॉन्फ़िगर करने की सुविधा

हमारा मुख्य फ़ोकस, बिल्ड फ़्लैग की लागत और भ्रम को कम करना है.

हम प्रोजेक्ट कॉन्फ़िगरेशन के नए मॉडल के साथ प्रयोग कर रहे हैं. इस मॉडल में, उपयोगकर्ताओं को यह जानने की ज़रूरत नहीं होती कि किस बिल्ड और टेस्ट फ़्लैग को कहां सेट करना है. इसलिए, $ bazel test //foo foo के प्रोजेक्ट की नीति के आधार पर, सही फ़्लैग अपने-आप सेट करता है. ऐसा हो सकता है कि यह सुविधा 9.0 में भी प्रयोग के तौर पर ही उपलब्ध रहे. हालांकि, इस बारे में अपने सुझाव, शिकायत या राय ज़रूर दें.

फ़्लैग स्कोपिंग की मदद से, प्रोजेक्ट की सीमाओं से बाहर निकलने पर Starlark फ़्लैग हटाए जा सकते हैं. इससे, ट्रांज़िशन डिपेंडेंसी पर कैश मेमोरी सेव करने की प्रोसेस में रुकावट नहीं आती, क्योंकि उन्हें फ़्लैग की ज़रूरत नहीं होती. इससे, ट्रांज़िशन का इस्तेमाल करने वाले बिल्ड, कम कीमत में और तेज़ी से बनते हैं. यहां एक उदाहरण दिया गया है. हम इस आइडिया को आगे बढ़ा रहे हैं, ताकि यह कंट्रोल किया जा सके कि कौनसे फ़्लैग exec कॉन्फ़िगरेशन में भेजे जाएं. साथ ही, हम कस्टम Starlark जैसी ज़्यादा सुविधाओं पर भी विचार कर रहे हैं, ताकि यह तय किया जा सके कि किन डिपेंडेंसी एज पर फ़्लैग भेजे जाएं.

हम पहले से मौजूद भाषा के फ़्लैग को Bazel से हटाकर, Starlark में ले जाने की कोशिश कर रहे हैं. यहां वे मिलते-जुलते नियमों की परिभाषाओं के साथ काम कर सकते हैं.

रिमोट से प्रोग्राम चलाने की सुविधा में सुधार

हम असाइनमेंट को एक साथ चलाने की सुविधा जोड़ने जा रहे हैं. इससे, रिमोट तौर पर असाइनमेंट को तेज़ी से चलाया जा सकेगा.


रोडमैप के अपडेट पाने और आने वाली सुविधाओं के बारे में चर्चा करने के लिए, slack.bazel.build पर कम्यूनिटी के Slack सर्वर से जुड़ें.

इस रोडमैप का मकसद, कम्यूनिटी को Bazel 9.0 के लिए टीम के मकसदों के बारे में बताना है. डेवलपर और ग्राहकों के सुझाव/राय या बाज़ार में नए अवसरों के हिसाब से, प्राथमिकताओं में बदलाव किया जा सकता है.