臉書介紹 最近發布了一個名為“Buck2”的新構建系統,它指出它是 專注於從存儲庫構建項目 MUY 包含不同語言代碼的大型 編程。
差異 在新的實現和系統之間 以前用過降壓 通過facebook 正在使用 Rust 語言而不是 Java 組裝過程的效率和性能顯著提高(在相同基礎設施的內部測試中,Buck2 執行組裝任務的速度是 Buck 的兩倍)。
構建系統介於開發人員和他們的代碼運行之間,因此我們可以做的任何讓體驗更快或更高效的事情都會直接影響開發人員的效率。 Buck2 的目標是保留我們對 Buck1 的喜愛(基礎知識和工作流程),從後 Buck1 創新(包括 Bazel、Adapton 和 Shake)中汲取靈感,並專注於速度和實現新體驗。
關於 Buck2
需要強調的是 該系統不依賴於特定語言的代碼創建 它開箱即用,支持用 C++、Python、Rust、Kotlin、Erlang、Swift、Objective-C、Haskell 和 Facebook 使用的 OCaml 編寫的構建器項目。
基於 Python(如 Bazel)的 Starlark 語言用於設計插件、創建腳本和規則。 Starlark 允許您擴展構建系統的功能,並從正在構建的項目中使用的特定語言中抽像出來。
有人提到 通過緩存結果實現高性能,工作並行化和支持遠程執行任務(Remote Build Execution)。
構建環境 使用“氣密性”的概念: 編譯後的代碼與外界脫節,構建過程中不從外部加載任何東西,在不同系統上重複執行該作業會導致相同的結果(重複構建,例如在同一平台上編譯項目的結果)開發人員的機器將與持續集成服務器上的構建完全相同)。 缺乏依賴性的情況在 Buck2 中被視為一個錯誤。
就 Buck2 主要特點,以下突出:
- 支持編程語言的規則和核心構建系統是完全分開的。 規則是用 Starlark 語言編寫的,Starlark 工具包和實現是用 Rust 編寫的。
- 構建系統使用單個增量依賴圖(無暫存),與 Buck 和 Bazel 相比,它允許您增加工作並行化的深度,並避免多種錯誤。
- Buck2 在 GitHub 上發布的代碼和編程語言支持規則與 Facebook 基礎設施中使用的內部版本幾乎相同(唯一的區別在於 Facebook 使用的編譯器版本和構建服務器的鏈接。)。
- 構建系統旨在與遠程作業執行系統集成,使您可以在遠程服務器上運行作業。 遠程執行 API 與 Bazel 兼容,並且已經過與 Buildbarn 和 EngFlow 的兼容性測試。
- 提供了與虛擬文件系統的集成,其中顯示了整個存儲庫的內容,但實際上,工作是使用存儲庫一部分的真實本地部分進行的(開發人員看到整個存儲庫,但只看到是必需的)訪問的文件是從存儲庫中檢索的)。 支持基於 EdenFS 的 VFS 和 Git LFS,它們被 Sapling 使用。
最後,對於那些有興趣能夠詳細了解它的人,他們應該知道代碼是在 Apache 2.0 許可下分發的,他們可以查閱詳細信息 在下面的鏈接中。