前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Bazel 7 发布:全新模块化依赖管理、无字节构建与多目标构建性能提升

Bazel 7 发布:全新模块化依赖管理、无字节构建与多目标构建性能提升

作者头像
深度学习与Python
发布2024-01-04 14:20:12
3010
发布2024-01-04 14:20:12
举报
文章被收录于专栏:深度学习与python

作者 | Sergio De Simone

译者 | Sambodhi

策划 | 丁晓昀

最近在 BazelCon 23 上宣布,Bazel 7 推出了多年来一直在开发中的一系列新功能,其中包括全新的模块化外部依赖管理系统 Bzlmod、全新优化的“Build without the Bytes”模式、得益于 Project Skymeld 的多目标构建性能改进等等。

Bzlmod 作为一个全新的模块化外部依赖管理系统,取代了旧的 WORKSPACE 机制。一个 Bazel 模块是一个项目,可以有多个版本,每个版本依赖于一组特定的依赖关系,如下所示:

代码语言:javascript
复制
module(name = "my-module", version = "1.0")

bazel_dep(name = "rules_cc", version = "0.0.1")
bazel_dep(name = "protobuf", version = "3.19.0")

Bzlmod,这个新的外部依赖子系统,不直接使用 repo 定义。相反,它从模块构建依赖图,运行在图的顶部的扩展,并相应地定义 repos。Bzlmod 现在默认启用,这意味着如果一个项目没有 MODULE.bazel 文件,Bazel 将创建一个空文件。虽然 Bazel 7 仍然与之前的系统兼容,但开发者应在 Bazel 8 发布之前进行 迁移 到 Bzlmod。

无字节构建(Build without the Bytes,BwoB)通过只下载中间文件的子集,有效减少了 Bazel 在远程构建中传输的数据量。

在过去,Bazel 的默认行为是在远程执行操作后,或者在命中远程缓存后下载操作的每个输出文件。然而,在大型构建中,所有输出文件的总和通常会达到数十甚至数百吉字节。远程执行和缓存的好处可能会被这种下载的成本所抵消,尤其是在网络连接较差的情况下。虽然 BwoB 已经存在很长时间,但现在它已经稳定,并且在边缘情况下变得可靠,因此可以作为新的默认选项使用。

Skymeld 是另一个旨在提高生产力的功能,特别是对于具有多个顶级目标的构建。它引入了一种评估模式,消除了分析和执行阶段之间的障碍,并且允许目标在其分析完成后独立执行,以提高构建速度。

最后提到,Bazel 7 现在默认启用了基于平台的工具链解析,适用于其 Android 和 C++ 规则。这一变化旨在简化所有规则集中的工具链解析 API,从而省去语言特定标志,如 --android_cpu--crosstool_top

Android 项目需要停止使用传统标志 --fat_apk_cpu,而改用使用以 @platforms//os:android 约束定义的平台的 --android_platforms。关于 Bazel 7 的其他功能,由于篇幅限制无法一一详述,请务必查看 官方发布说明 获取完整的细节。

作者简介:

Sergio De Simone 是一位资深软件工程师。在过去的 25 年中,他参与了多个不同的项目和公司,包括西门子、惠普等各种工作环境。过去的 10 多年里,他专注于移动平台及相关技术的开发。目前,他在 BigML,Inc. 工作,负责领导 iOS 和 macOS 的开发。

原文链接:

https://www.infoq.com/news/2023/12/bazel-7-released/

声明:本文为 InfoQ 翻译整理,未经许可禁止转载。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 InfoQ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档