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 की बाहरी डिपेंडेंसी मैनेज करने की सुविधा को बेहतर बनाया जाएगा. इसमें ये शामिल हैं:

  • नए फ़्लैग --enable_workspace को false पर सेट करके, WORKSPACE की सुविधा को पूरी तरह से बंद किया जा सकता है.
  • डायरेक्ट्री पर नज़र रखने वाला नया एपीआई (#21435 देखें, यह Bazel 7.1 में उपलब्ध है).
  • डिपेंडेंसी के वर्शन अपडेट के दौरान, कार्रवाइयों को बेहतर तरीके से कैश मेमोरी में सेव करने के लिए, कैननिकल रिपॉज़िटरी के नाम जनरेट करने की बेहतर स्कीम. (#21316, Bazel 7.1 में उपलब्ध है)
  • शेयर की गई रिपॉज़िटरी की बेहतर कैश मेमोरी (#12227 देखें).
  • वेंडर और ऑफ़लाइन मोड के लिए सहायता — इससे उपयोगकर्ता, पहले से डाउनलोड की गई डिपेंडेंसी के साथ बिल्ड चला सकते हैं (#19563 देखें).
  • लॉक की गई फ़ाइलों में मर्ज करने से जुड़ी समस्याएं कम की गईं (#20396).
  • Segmented 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 सेट किए बिना, डिफ़ॉल्ट फ़्लैग के साथ टारगेट अपने-आप बनाएं.
  • बिल्ड फ़्लैग में बदलाव होने पर, बिल्ड विश्लेषण को हर बार फिर से न करें.

Project Skyfocus - minimize retained data structures

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 के रजिस्टर किए हुए ट्रेडमार्क हैं