Bazel 發展藍圖

回報問題 查看原始碼

總覽

隨著 Bazel 專案持續依據您的需求發展,我們想與您分享 2024 年的更新內容。

這份藍圖說明 Bazel 開發的未來發展計畫和預測,讓您掌握目前的優先事項和進行中的專案。

Bazel 8.0 版本

我們預計在 2024 年底推出 Bazel 8.0 長期支援版 (LTS)。下列功能預計會導入。

Bzlmod:外部依附元件管理系統

Bzlmod 會自動解析遞移依附元件,讓專案得以擴充,同時保持快速且節省資源。

使用 Bazel 8 時,我們將預設停用 WORKSPACE 支援功能 (您還是可以使用 --enable_workspace 加以啟用),也將移除 Bazel 9 WORKSPACE 方面的支援。從 Bazel 7.1 開始,就可以設定 --noenable_workspace 來採用新的行為。

Bazel 8.0 將包含多項 Bazel 外部依附元件管理功能的強化項目,包括:

  • 新旗標 --enable_workspace 可以設為 false,以完全停用 WORKSPACE 功能。
  • 監控 API 的新目錄 (請參閱在 Bazel 7.1 中隨附的 #21435)。
  • 改善產生標準存放區名稱的配置,以提升依附元件版本更新動作的快取能力。(#21316,在 Bazel 7.1 中出貨)
  • 改善的共用存放區快取 (請參閱 #12227)。
  • 廠商和離線模式支援 — 可讓使用者使用預先下載的依附元件執行建構作業 (請參閱 #19563)。
  • 減少鎖定檔案的合併衝突 (#20396)。
  • 經過區隔的 MODULE.bazel (#17880)
  • 允許覆寫模組擴充功能產生的存放區 (#19301)
  • 改善說明文件 (例如 #18030#15821),以及遷移指南和遷移工具。

遠端執行改善項目

  • 新增非同步執行作業支援功能,使用標記 --jobs 提高平行處理速度,藉此加快遠端執行速度。
  • 使用全新的精簡執行記錄檔,輕鬆對快取失敗進行偵錯,大幅縮減其大小和執行階段負擔 (請參閱 #18643)。
  • 為磁碟快取實作垃圾收集 (請參閱 #5139)。
  • 實作遠端輸出服務,以便延遲下載任意建構輸出內容 (請參閱 #20933)。

Android、C++、Java、Python 和 Proto 規則遷移

將 Android、C++、Java 和 Python 規則集遷移至專屬存放區,並將這些規則與 Bazel 版本分離。這麼做可讓 Bazel 使用者和規則作者

  • 可在 Bazel 單獨更新規則。
  • 視需要更新及自訂規則。

規則集的新位置將是 bazelbuild/rules_androidrules_ccrules_javarules_pythongoogle/protobufrules_proto 即將淘汰。

Bazel 8 將提供臨時遷移標記,自動使用其存放區中先前的部分二進位檔規則。這些規則集的所有使用者最終將取決於其存放區,並以類似從未屬於 Bazel 的其他規則集來載入這些規則集。

Bazel 8 也會改善現有的擴充規則和子規則 API,並將其標示為非實驗 API。

Starlark 改善項目

  • 符號巨集是一種編寫巨集的新方式,更適合 BUILD 使用者、巨集作者和工具使用。與 Bazel 相比,舊版巨集的洞察有限,符號巨集可協助使用者避免常見錯誤,並強制執行最佳做法。
  • 套件最終器是為新增自訂套件驗證邏輯而加入一流支援的功能。只是用來協助我們淘汰 native.existing_rules()

可設定性

  • 輸出路徑對應在持續穩定發展:為使用轉場效果的規則設計人員提供更好的遠端快取效能及建構速度。
  • 自動設定適合特定 --platforms 的建構旗標。
  • 定義專案支援的旗標組合,並使用預設標記自動建構目標,而無需設定 bazelrc。
  • 請勿在每次建構旗標變更時重做建構分析。

專案星空功能 - 盡量減少保留的資料結構

Bazel 會將大量狀態保存在 RAM 中,以便快速漸進式執行建構作業。然而,開發人員經常變更來源檔案的一小部分 (例如幾乎從未有一個外部依附元件)。有了 Skyfocus,Bazel 就能以實驗性的方式捨棄不必要的漸進式狀態,減少 Bazel 的記憶體使用量,同時仍提供同樣的快速漸進式建構體驗。

初始範圍僅著重於改善保留的堆積指標。峰值堆積縮減可能是可能,但不包含在初始範圍中。

其他

  • 行動裝置安裝 v3,這是較簡單且維護較好的做法,可逐步部署 Android 應用程式。
  • 存放區快取和 Bazel 的 install_base 的垃圾收集。
  • 減少沙箱負擔。

Bazel-JetBrains* IntelliJ IDEA 支援

漸進式 IntelliJ 外掛程式更新,以支援最新的 JetBrains 外掛程式版本。

此藍圖快照目標,不應視為保證。我們可能會根據開發人員和客戶的意見回饋,或新的市場商機調整優先順序。

如要接收新功能的通知 (包括這項藍圖的最新資訊),請加入 Google 網路論壇社群。

*Copyright © 2022 JetBrains s.r.o. JetBrains 和 IntelliJ 是 JetBrains s.r.o 的註冊商標