Bazel Vision

所有軟體開發人員都能透過易於採用及擴充的工具,以有效率的方式建構、測試及封裝任何專案,而且不受規模或複雜性影響。

  • 工程師可培養堅固的基礎知識。軟體開發人員專注於編寫程式碼的創意流程,因為建構和測試的機械程序已經完成。當使用者自訂建構系統以支援新的語言或獨特的機構需求時,使用者會專注於具備獨特用途的擴充性,不必重新塑造基本配電。

  • 工程師可以輕鬆為任何專案做出貢獻。如果開發人員想開始處理新專案,只要複製專案並執行建構即可。因此不需使用本機設定,而且一切正常。有了跨平台遠端執行功能,他們可以在任意位置使用任何機器,並針對專案目標的所有平台完整測試變更。工程師可以為新專案快速設定版本,或逐步遷移現有版本。

  • 專案可以擴充至任何規模的程式碼集,且任何規模的團隊。快速的漸進式測試可讓團隊在提交各項變更前完整驗證所有變更。即使存放區的成長、專案橫跨多個存放區,以及導入了多種語言,這仍是如此。基礎架構並不會強制開發人員交換建構速度的測試涵蓋範圍。

我們相信 Bazel 有能力實現這個願景。

Bazel 是從零開始建構的,目的是啟用可重現的建構作業 (特定輸入組合一律會產生相同的輸出內容) 和可攜性 (建構作業可在任何機器上執行,且不會影響輸出)。

這些特性可以支援安全成效增幅 (僅重建已變更的輸入不會造成損毀的風險) 和分散性 (建構動作會隔離並可以卸載)。Bazel 將執行正確建構作業所需的工作量降至最低,同時平行處理多個核心和遠端系統的工作,讓任何建構作業都能快速完成。

Bazel 的抽象層 (單指透過簡易擴充語言實作的語言、平台和工具鍊的特定指示) 可輕鬆套用至任何情境。

Bazel 核心能力

  1. Bazel 支援多語言、多平台建構和測試。無論您的目標語言和平台組合為何,您都可以執行單一指令來建構並測試整個原始碼樹狀結構。
  2. Bazel 建構作業快速且正確。無論是在開發人員的機器還是持續整合 (CI) 中,每次建構和測試執行作業都會逐步增加。
  3. Bazel 提供可擴充的統一語言,用於定義任何語言或平台的建構。
  4. Bazel 會連線至遠端執行及快取服務,讓您的建構作業調度資源
  5. Bazel 適用於所有主要開發平台 (Linux、MacOS 和 Windows)。
  6. 我們接受採用 Bazel,但這方面可能需要努力,但也許可以逐步採用。Bazel 介面和適用於特定語言/平台的官方標準工具。

服務語言社群

軟體工程會隨著語言社群的脈絡而進化,通常是透過常用工具和做法的自主組織。

想要讓語言社群的成員使用優質的 Bazel 規則,必須與該社群的工作流程和慣例整合。

Bazel 致力確保可擴充及開放,並支援各種語言適用的良好規則集。

優質規則集的必要條件

  1. 規則需要支援該語言的有效建構和測試,包括程式碼涵蓋率。
  2. 這些規則必須針對該語言與廣泛使用的「套件管理員」介面互動 (例如適用於 Java 的 Maven),並且支援其他廣泛使用的建構系統中的漸進式遷移路徑。
  3. 這些規則必須可擴充且可互通,並遵循「Bazel sandwich」原則。
  4. 規則必須可供遠端執行。在實務上,這表示可以使用「工具鍊」機制進行設定
  5. 規則 (和 Bazel) 需要針對該語言與廣泛使用的 IDE 介面互動 (如果有的話)。
  6. 這些規則需要具備完整且可用的說明文件、包含新使用者適用的入門教材,以及專業使用者專用的詳盡文件。

這三項要素都很重要,而且只能共同針對自家生態系統提供 Bazel 的適任性標準。

而且,無論這些規模大小,都已經夠多了,Bazel 就足以為語言社群的成員創造了其價值。