Facebook 发布了 Buck2 构建系统

Facebook 推出了一个新的构建系统 Buck2,旨在组织来自非常大的存储库的项目构建,包括不同编程语言的代码。 新实现与Facebook之前使用的Buck系统之间的主要区别在于使用Rust语言而不是Java,并且组装过程的效率和生产力显着提高(在相同基础设施的内部测试中,Buck2执行组装)任务速度是巴克的两倍)。 该代码根据 Apache 2.0 许可证分发。

该系统不依赖于特定语言的代码汇编,并且开箱即用地支持用 C++、Python、Rust、Kotlin、Erlang、Swift、Objective-C、Haskell 和 OCaml 语言编写的项目的汇编,由 Facebook 使用。 Starlark 语言基于 Python(如 Bazel),用于设计附加组件、构建脚本和规则。 Starlark 允许您扩展组装系统的功能,并从组装项目中使用的特定语言中进行抽象。

高性能是通过结果缓存、工作并行化和支持远程执行任务(远程构建执行)来实现的。 在汇编环境中,使用了“密封性”的概念——汇编代码与外界隔绝,汇编过程中不从外部加载任何内容,并且在不同系统上重复执行工作会导致相同的结果(重复组装,例如,在开发人员的机器上组装项目的结果将与持续集成服务器上的构建完全相同)。 缺乏依赖性的情况在 Buck2 中被视为错误。

Buck2的主要特点:

  • 支持编程语言的规则和汇编系统的核心是完全分开的。 规则使用 Starlark 语言,Starlark 工具包和实现是用 Rust 编写的。
  • 汇编系统使用单个增量依赖图(不划分阶段),与 Buck 和 Bazel 相比,它允许增加工作并行化的深度,并避免多种类型的错误。
  • GitHub 上发布的 Buck2 代码以及支持编程语言的规则与 Facebook 基础设施中使用的内部版本几乎相同(唯一的区别与 Facebook 中使用的编译器和汇编服务器的版本有关)。
  • 装配系统的设计着眼于与远程任务执行系统集成,使您可以在远程服务器上运行工作。 远程执行 API 与 Bazel 兼容,并测试了与 Buildbarn 和 EngFlow 的兼容性。
  • 提供与虚拟文件系统的集成,其中呈现整个存储库的内容,但实际上,工作是使用存储库部分的当前本地切片进行的(开发人员看到整个存储库,但只能看到所需的文件)所访问的内容是从存储库中提取的)。 支持基于 EdenFS 的 VFS 和 Sapling 中使用的 Git LFS。

来源: opennet.ru

添加评论