Buck2,新的 Facebook 构建系统

Buck2-英雄

Buck2,Facebook 新的开源构建系统

脸书介绍 最近发布了一个名为“Buck2”的新构建系统,它指出它是 专注于从存储库构建项目 包含不同语言代码的大型 编程。

差异 在新的实现和系统之间 以前用过降压 通过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 许可下分发的,他们可以查阅详细信息 在下面的链接中。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。