Starlark 發展藍圖

上次驗證時間:2020 年 4 月 21 日 (更新記錄)

聯絡窗口: laurentlb

目標

我們的目標是讓 Bazel 更具擴充性。使用者應該要能夠輕鬆實作自己的規則,並支援新的語言和工具。我們希望改善編寫及維護這些規則的體驗。

著重於兩個方面:

  • 確保語言和 API 的設計簡單、強大且功能強大。
  • 提供更優質的工具,用於讀取、編寫、更新、偵錯及測試程式碼。

2020 年第 2 季

建立健康和最佳做法:

  • 第 0 頁:不建議使用沒有名稱的巨集,並確保名稱為不重複的字串常值。這項工作的重點在於 Google 程式碼集,但可能會影響公開可用的工具。
  • 第 0 頁:讓 Buildozer 指令能夠可靠地處理選取項目和變數。
  • 第 1 頁:讓 Buildifier 能移除清單中因註解而無法排序的重複項目。
  • 第 1 頁:更新 Buildifier Linter,以建議內嵌複雜的運算式。
  • 第 2 頁:研究 native.Existing_rules 的用途並提出替代做法。
  • 第 2 頁:研究 Prelude 檔案的應用實例並提出替代做法。

效能:

  • 第 1 頁:使用平面環境和位元碼編譯,將 Starlark 直譯器最佳化。

技術債減少:

  • 第 0 頁:新增將原生符號移植到 @bazel_tools 底下的 Starlark。
  • 第 1 頁:刪除過時的標記 (其中部分標記仍用於 Google,因此我們需要先清理程式碼集):incompatible_always_check_depset_elementsincompatible_disable_deprecated_attr_paramsincompatible_no_support_tools_in_action_inputsincompatible_new_actions_api
  • 第 1 頁:確保下列標記可在 Bazel 4.0 中翻轉:incompatible_disable_depset_itemsincompatible_no_implicit_file_exportincompatible_run_shell_command_stringincompatible_restrict_string_escapes
  • 第 1 頁:完成 lib.syntax 工作 (API 清理、與 Bazel 分隔)。
  • 第 2 頁:Bazel 的 Java 套件對執行複雜的編輯作業,造成建構 + 測試延遲時間縮短 50%。

社群:

  • rules_python 活躍且由社群維護。
  • 持續支援 Rules_jvm_external (無待處理的提取要求、問題分類、發布版本)。
  • 維護 Bazel 說明文件基礎架構:集中處理 bazel-website、bazel-blog 和文件的 CSS 樣式並標準化
  • Bazel 文件:新增 e2e 文件網站建構的持續整合測試,以避免發生迴歸問題。

2020 年第 1 季

建立健康和最佳做法:

  • 允許目標追蹤巨集呼叫堆疊,以便透過 bazel query 匯出
  • 導入--incompatible_no_implicit_file_export
  • 移除已淘汰的 depset API (#5817、#10313、#9017)。
  • 在 Buildifier 中新增跨檔案分析工具、針對已淘汰的函式實作檢查。

效能:

  • 讓 Bazel 專屬的 Java 測試速度快上 2 倍。
  • 實作 Starlark CPU 分析器。

技術債減少:

  • 移除 8 個不相容的標記 (套用後)。
  • 完成 lib.syntax 清理工作 (中斷依附元件)。
  • Starlark 最佳化:平面環境、位元碼編譯
  • 盡可能刪除分析階段中的所有序列化作業
  • 制定簡化/最佳化 lib.packages 的計畫

社群:

  • 發布包含所有 Bazel 專屬字詞定義的詞彙