Bazel का रोडमैप

खास जानकारी

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

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

Bazel 8.0 रिलीज़

हम 2024 के आखिर तक, Bazel 8.0 के लिए लंबे समय तक सहायता (एलटीएस) देने की योजना बना रहे हैं. हमारी योजना है कि हम ये सुविधाएं लागू करेंगे.

Bzlmod: बाहरी डिपेंडेंसी मैनेजमेंट सिस्टम

Bzlmod, ट्रांज़िटिव डिपेंडेंसी को अपने-आप हल करता है. इससे प्रोजेक्ट को तेज़ी से और कम संसाधनों में स्केल किया जा सकता है.

Bazel 8 के साथ, हम WORKSPACE की सुविधा को डिफ़ॉल्ट रूप से बंद कर देंगे. हालांकि, --enable_workspace का इस्तेमाल करके, इसे चालू किया जा सकेगा. Bazel 9 के साथ, WORKSPACE की सुविधा हटा दी जाएगी. Bazel 7.1 से, नई सुविधा का इस्तेमाल करने के लिए, --noenable_workspace सेट किया जा सकता है.

Bazel 8.0 में, Bazel की बाहरी डिपेंडेंसी मैनेजमेंट की सुविधा में कई सुधार किए जाएंगे. इनमें ये शामिल हैं:

  • WORKSPACE की सुविधा को पूरी तरह से बंद करने के लिए, नया फ़्लैग --enable_workspace, false पर सेट किया जा सकता है.
  • नई डायरेक्ट्री वॉचिंग एपीआई (देखें #21435, Bazel 7.1 में शिप की गई).
  • डिपेंडेंसी वर्शन अपडेट के दौरान, कार्रवाइयों की बेहतर कैशिंग के लिए, कैननिकल रिपॉज़िटरी के नाम जनरेट करने की बेहतर स्कीम. (#21316, Bazel 7.1 में शिप की गई)
  • शेयर की गई रिपॉज़िटरी की बेहतर कैश मेमोरी (देखें #12227).
  • वेंडर और ऑफ़लाइन मोड की सुविधा — इससे उपयोगकर्ता, पहले से डाउनलोड की गई डिपेंडेंसी के साथ बिल्ड चला सकते हैं (देखें #19563).
  • लॉक फ़ाइलों में मर्ज से जुड़ी गड़बड़ियां कम की गईं (#20396).
  • सेगमेंट किया गया MODULE.bazel (#17880)
  • मॉड्यूल एक्सटेंशन से जनरेट की गई रिपॉज़िटरी को ओवरराइड करने की अनुमति (#19301)
  • बेहतर दस्तावेज़ (जैसे, #18030, #15821) और माइग्रेशन गाइड और माइग्रेशन टूलिंग.

रिमोट एक्ज़ीक्यूशन में सुधार

  • एसिंक्रोनस एक्ज़ीक्यूशन की सुविधा जोड़ी गई है. इससे --jobs फ़्लैग के साथ, ज़्यादा पैरललिज़्म की मदद से रिमोट एक्ज़ीक्यूशन की स्पीड बढ़ाई जा सकती है.
  • नई कॉम्पैक्ट एक्ज़ीक्यूशन लॉग की मदद से, कैश मेमोरी से जुड़ी गड़बड़ियों को डीबग करना आसान बनाया गया है, इससे लॉग का साइज़ 100 गुना कम हो जाता है और रनटाइम ओवरहेड काफ़ी कम हो जाता है (देखें #18643).
  • डिस्क कैश के लिए, गार्बेज कलेक्शन की सुविधा लागू की गई है (देखें #5139).
  • रिमोट आउटपुट सेवा लागू की गई है. इससे बिल्ड के आउटपुट को ज़रूरत पड़ने पर डाउनलोड किया जा सकता है (देखें #20933).

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

Android, C++, Java, और Python के नियम सेट को, अलग-अलग रिपॉज़िटरी में पूरी तरह से माइग्रेट किया गया है. साथ ही, इन्हें Bazel की रिलीज़ से अलग किया गया है. इससे Bazel के उपयोगकर्ता और नियम बनाने वाले लोग या कंपनियां

  • Bazel से अलग, नियमों को अपडेट कर सकती हैं.
  • ज़रूरत के हिसाब से नियमों को अपडेट और कस्टमाइज़ कर सकती हैं.

नियम सेट की नई जगह, bazelbuild/rules_android, rules_cc, rules_java, rules_python, और google/protobuf होगी. rules_proto को बंद किया जाएगा.

Bazel 8 में, माइग्रेशन के लिए एक अस्थायी फ़्लैग दिया जाएगा. इससे उन नियम सेट का इस्तेमाल अपने-आप हो जाएगा जो पहले बाइनरी का हिस्सा थे. उम्मीद है कि उन नियम सेट के सभी उपयोगकर्ता, आखिर में अपनी रिपॉज़िटरी पर निर्भर रहेंगे और उन्हें अन्य नियम सेट की तरह ही लोड करेंगे. ये नियम सेट, कभी भी Bazel का हिस्सा नहीं थे.

Bazel 8 में, मौजूदा एक्सटेंडिंग नियम और सब-रूल एपीआई को भी बेहतर बनाया जाएगा. साथ ही, इन्हें एक्सपेरिमेंटल के तौर पर मार्क नहीं किया जाएगा.

Starlark में सुधार

  • सिंबॉलिक मैक्रो, मैक्रो लिखने का एक नया तरीका है. यह BUILD के उपयोगकर्ताओं, मैक्रो बनाने वाले लोगों या कंपनियों, और टूलिंग के लिए ज़्यादा आसान है. लेगसी मैक्रो की तुलना में, सिंबॉलिक मैक्रो उपयोगकर्ताओं को आम तौर पर होने वाली गड़बड़ियों से बचने और सबसे सही तरीकों को लागू करने में मदद करते हैं. Bazel को लेगसी मैक्रो के बारे में सीमित जानकारी ही मिलती है.
  • पैकेज फ़ाइनलाइज़र, कस्टम पैकेज की पुष्टि करने की लॉजिक के लिए, पहली क्लास की सहायता जोड़ने के लिए प्रस्तावित सुविधा है. इनका मकसद, native.existing_rules() को बंद करने में हमारी मदद करना है.

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

  • आउटपुट पाथ मैपिंग की सुविधा लगातार बेहतर हो रही है. इससे ट्रांज़िशन का इस्तेमाल करने वाले नियम डिज़ाइनर के लिए, रिमोट कैश मेमोरी की बेहतर परफ़ॉर्मेंस और बिल्ड की स्पीड मिलती है.
  • दिए गए --platforms के लिए, बिल्ड फ़्लैग अपने-आप सेट हो जाते हैं.
  • प्रोजेक्ट के लिए काम करने वाले फ़्लैग के कॉम्बिनेशन तय करें और bazelrcs सेट किए बिना, डिफ़ॉल्ट फ़्लैग के साथ टारगेट अपने-आप बनाएं.
  • बिल्ड फ़्लैग में बदलाव होने पर, हर बार बिल्ड विश्लेषण फिर से न करें.

प्रोजेक्ट Skyfocus - सेव किए गए डेटा स्ट्रक्चर को कम करना

Bazel, इंक्रीमेंटल बिल्ड को तेज़ी से बनाने के लिए, रैम में काफ़ी डेटा सेव रखता है. हालांकि, डेवलपर अक्सर सोर्स फ़ाइलों के छोटे सबसेट में बदलाव करते हैं. जैसे, बाहरी डिपेंडेंसी में से किसी एक में शायद ही कभी बदलाव किया जाता है. Skyfocus की मदद से, Bazel, एक्सपेरिमेंटल तरीके से, गैर-ज़रूरी इंक्रीमेंटल डेटा को हटा देगा. साथ ही, Bazel की मेमोरी फ़ुटप्रिंट को कम कर देगा. इसके बावजूद, इंक्रीमेंटल बिल्ड को तेज़ी से बनाने का अनुभव पहले जैसा ही मिलेगा.

शुरुआत में, इसका मकसद सिर्फ़ सेव किए गए हीप मेट्रिक को बेहतर बनाना है. पीक हीप को कम किया जा सकता है, लेकिन इसे शुरुआती दायरे में शामिल नहीं किया गया है.

अन्य सुविधाएं

  • मोबाइल इंस्टॉल v3, Android ऐप्लिकेशन को धीरे-धीरे डिप्लॉय करने का एक आसान और बेहतर तरीका है.
  • रिपॉज़िटरी कैश और Bazel के install_base के लिए, गार्बेज कलेक्शन की सुविधा.
  • सैंडबॉक्सिंग ओवरहेड कम किया गया.

Bazel-JetBrains* IntelliJ IDEA के लिए सहायता

JetBrains प्लगिन की नई रिलीज़ के लिए सहायता देने के लिए, IntelliJ प्लगिन के इंक्रीमेंटल अपडेट.

इस रोडमैप में टारगेट के स्नैपशॉट शामिल हैं. इन्हें गारंटी के तौर पर नहीं लिया जाना चाहिए. डेवलपर और ग्राहक की राय या मार्केट के नए अवसरों के हिसाब से, प्राथमिकताओं में बदलाव किया जा सकता है.

नई सुविधाओं के बारे में सूचना पाने के लिए — इसमें इस रोडमैप के अपडेट भी शामिल हैं — Google Group कम्यूनिटी में शामिल हों.

*कॉपीराइट © 2022 JetBrains s.r.o. JetBrains और IntelliJ, JetBrains s.r.o के रजिस्टर किए गए ट्रेडमार्क हैं