构建工具Bazel发布1.0版本,更稳定,更高兼容性

Bazel源自谷歌内部构建工具Blaze,是一个构建和测试工具,提供了人类可读的定义语言,主要针对具有多语言、多代码库的大型项目。Bazel最初是在2015年开源的,现在发布了1.0版本

Bazel 1.0保证了更高的稳定性和向后兼容性,因为这些是Bazel用户的主要痛点。Bazel或其生态系统经常发生重大变更,导致用户经常需要重写一部分构建规则。事实上,Bazel团队已经承诺在未来的Bazel版本中遵循语义版本控制,这意味着只有主要版本才允许包含重大变更。此外,Bazel团队承诺主要版本之间至少保持稳定三个月。

在创建依赖关系图时,Bazel使用内容摘要而不是时间戳来确定过时的工件,这样就有可能可以避免不必要的重新构建,即使是分布在多个时钟不完全同步的主机上也可以进行可预测的构建。分布式构建是Bazel的一个复杂特性,为了能够在云端构建大型的系统。因为使用了内容摘要,Bazel能够缓存中间构建步骤的输出结果,并在必要时重用它们。中间结果也可以在团队之间共享。Bazel的另一个独特之处在于它的密封性。也就是说,Bazel的构建是沙箱化的,如果一个构建规则没有声明依赖于一个给定的文件,那么它将不能完全打开那个文件,从而排除了隐藏依赖的可能性。这就提升了可优化的空间,并支持可重复的构建。

与其他大多数构建系统(通常与特定的语言绑定)相反,Bazel从一开始就是一个多语言构建系统。这是通过为可构建目标类型定义一些特定于语言的规则来实现的,例如,针对C/ C++的cc_library和cc_binary规则,针对Java的java_binary和java_import,等等。对主要语言的支持都是开箱即用的,如果有必要也可以很容易添加新的规则。

Bazel用来定义新规则的语言叫做Starlark,它的灵感来自于Python 3语法,尽管它并不包含所有Python特性。它不支持可变集合或文件I/O,主要是为了防止程序员使用这些特性来创建构建系统之前不知道的工件,从而破坏Bazel依赖关系图。

Bazel 1.0的发布得到了一些开发人员的积极响应,他们对Bazel的性能和效率超过其他构建工具(如Maven和Gradle)大加赞许。向后兼容性被大多数开发人员认为是向前迈出的重要一步,为Bazel第三方规则生态系统的发展提供了更稳定的基础。

原文链接

Open-Source Build and Test Tool Bazel Reaches 1.0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章