Bazel का रोडमैप

किसी समस्या की शिकायत करना सोर्स देखना Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

खास जानकारी

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 सेट किए बिना, डिफ़ॉल्ट फ़्लैग के साथ टारगेट अपने-आप बनाएं.
  • हर बार बिल्ड फ़्लैग बदलने पर, बिल्ड का विश्लेषण दोबारा न करें.

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

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

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

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

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

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

IntelliJ प्लग इन के इंक्रीमेंटल अपडेट, ताकि JetBrains प्लग इन के नए वर्शन के साथ काम किया जा सके.

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

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

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