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 की सुविधा को पूरी तरह से बंद किया जा सकता है.
  • डायरेक्ट्री वॉचिंग एपीआई का नया वर्शन (Bazel 7.1 में शामिल #21435 देखें).
  • डिपेंडेंसी के वर्शन अपडेट के दौरान, कार्रवाइयों को बेहतर तरीके से कैश मेमोरी में सेव करने के लिए, कैननिकल रिपॉज़िटरी के नाम जनरेट करने की बेहतर स्कीम. (#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 - कम से कम डेटा स्ट्रक्चर सेव करना

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