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 (請參閱 #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_androidrules_ccrules_javarules_pythongoogle/protobufrules_proto即將淘汰。

Bazel 8 會提供暫時的遷移標記,自動使用先前來自存放區的二進位檔規則集。這些規則集的所有使用者最終都應依附於其存放區,並以類似於從未納入 Bazel 的其他規則集的方式載入這些規則集。

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

Starlark 改善項目

  • 符號巨集是撰寫巨集的新方式,對使用者、巨集作者和工具更友善。BUILD相較於 Bazel 只能有限度瞭解的舊版巨集,符號巨集可協助使用者避免常見陷阱,並強制執行最佳做法。
  • 封裝最終化程式是建議的功能,可為自訂封裝驗證邏輯新增頂級支援。這些資訊有助於我們淘汰 native.existing_rules()

可設定性

  • 輸出路徑對應持續穩定:對於使用轉換的規則設計人員,這表示遠端快取效能和建構速度將有所提升。
  • 自動設定適合特定 --platforms 的建構標記。
  • 定義專案支援的旗標組合,並使用預設旗標自動建構目標,不必設定 bazelrc。
  • 請勿在每次建構旗標變更時,重新進行建構分析。

Project Skyfocus - 盡量減少保留的資料結構

Bazel 會在 RAM 中保留大量狀態,以加快漸進式建構作業的速度。不過,開發人員通常只會變更一小部分的來源檔案 (例如幾乎不會變更外部依附元件)。透過 Skyfocus,Bazel 會提供實驗方法,捨棄不必要的增量狀態並減少 Bazel 的記憶體用量,同時仍提供相同的快速增量建構體驗。

初始範圍的目標僅在於改善保留的堆積指標。尖峰堆積減少是可能的,但不在初始範圍內。

其他

  • 行動安裝 v3,可簡化並改善 Android 應用程式的增量部署方式。
  • 存放區快取和 Bazel 的 install_base 垃圾收集。
  • 減少沙箱負擔。

Bazel-JetBrains* IntelliJ IDEA 支援

IntelliJ 外掛程式會逐步更新,以支援最新版 JetBrains 外掛程式。

這份藍圖僅為目標快照,不應視為保證。 優先順序可能會因應開發人員和客戶的意見回饋或新商機而有所變動。

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

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