武汉的开发者们注意啦!AI技术战略、框架以及最佳实战尽在Azure OpenAI Day 了解详情
写点什么

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

  • 2019-10-28
  • 本文字数:926 字

    阅读完需:约 3 分钟

构建工具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


2019-10-28 08:001789

评论

发布
暂无评论
发现更多内容

Docker镜像列表中的none:none是什么

程序员欣宸

Docker 9月月更

Java 面试之技术框架

小小怪下士

Java spring 编程 程序员

数字化办公,企业OA软件技术该如何发力?

FinClip

英特尔Wi-Fi 7速率提升5倍,为多应用场景带来改变

科技之家

基于云原生技术打造全球融合通信网关

阿里云视频云

云原生 网络 通信 通信云

基于微信小程序的会议室预定平台开发笔记

CC同学

大数据调度平台Airflow(六):Airflow Operators及案例

Lansonli

airflow 9月月更

这样Debug,排查问题效率大大提升...

程序知音

为什么Java中有三种基础的类加载器?

小小怪下士

Java 编程 程序员 程序

前端面试哪些是必须要掌握的

loveX001

JavaScript 前端

EasyCV带你复现更好更快的自监督算法-FastConvMAE

阿里云大数据AI技术

深度学习 算法 计算机视觉

2.69分钟完成BERT训练!新发CANN 5.0加持

华为云开发者联盟

人工智能 企业号九月金秋榜

Vue3-无限滚动的懒加载-模拟网络请求Mock版

Sam9029

Vue 前端 9月月更 无限滚动

Qt|制作简单的不规则窗体

中国好公民st

qt 事件 9月月更

PipyJS - 函数式网络编程语言

Flomesh

Service Mesh 服务网格

长安链ca 容器部署(解决无法访问Mysql问题)

长安链

设计模式和七大设计原则不难的

知识浅谈

设计模式 设计原则 9月月更

ESP32-C3入门教程 基础篇(八、NVS — 非易失性存储库的使用)

矜辰所致

ESP32-C3 9月月更 NVS

汽车总线系统

不脱发的程序猿

汽车电子 CAN总线 汽车总线系统

netty原理分析

小小怪下士

Java 编程 程序员 后端 Netty

35岁程序员自荐:我所掌握的架构技术

小小怪下士

Java 程序员 中年危机

架构师成长之路——什么是架构师

小小怪下士

Java 程序员 架构 后端

腾讯云,DevOps 领导者!

CODING DevOps

腾讯云 DevOps IDC CODING

Java | extends关键字【面向对象的第二大特征——继承】

Fire_Shield

Java 9月月更 extends

开发者问第四期|统一扫码服务、机器学习服务等问题解答

HMS Core

成为优秀程序员的8种方法

小小怪下士

Java 程序员 职业发展

云图说丨DDoS防护解决方案:DDoS大流量攻击防得住

华为云开发者联盟

云计算 后端 华为云 企业号九月金秋榜

打破联接壁垒,华为云IoT到底强在哪?

华为云开发者联盟

云计算 后端 物联网 华为云 企业号九月金秋榜

【存疑】爬虫学习中decode问题

Sher10ck

存疑

Lua脚本在Redis事务中的应用实践

京东科技开发者

数据库 redis 事务 开发语言 Lua脚本

中国DevOps平台市场,华为云再次位居领导者位置

华为云开发者联盟

云计算 华为云 企业号九月金秋榜

构建工具Bazel发布1.0版本,更稳定,更高兼容性_开源_Sergio De Simone_InfoQ精选文章