2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

评论

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

Vue进阶(七):走近 package.json

No Silver Bullet

Vue npm 8月日更

跟我学AI建模:分子动力学仿真模拟之DeepMD-kit框架

华为云开发者联盟

AI 仿真 分子动力学 分子 建模

Java开发热门前沿知识!Java集合中的基本数据结构

策划Java工程师

Java 程序员 面试 后端

从 Docker 中安装启动 Druid

HoneyMoose

手撸二叉树之平衡二叉树

HelloWorld杰少

数据结构与算法 8月日更

kafka日志写入logstash

Rubble

Logstash Kafk 8月日更

Java开发6年了,你确定你真的理解_双亲委派_了吗?

Java 程序员 面试 后端

Java开发入门教程!你技术这么好,总要改变点什么把

Java 程序员 面试 后端

Java开发实战!不会吧

策划Java工程师

Java 程序员 面试 后端

Docker 集群安装时的服务和进程分配

HoneyMoose

netty系列之:netty架构概述

程序那些事

Java Netty nio 程序那些事

Java开发指南!Redis高频面试笔记:基础

策划Java工程师

Java 程序员 面试 后端

Java开发面试准备,【备战秋招冲击大厂

策划Java工程师

Java 程序员 面试 后端

kubernetes入门:使用kubeadm搭建master,亲测无异常

小鲍侃java

8月日更

架构实战营 毕业设计

👈

架构实战营

Java开发经验谈:动手造轮子:实现一个简单的-AOP-框架

策划Java工程师

Java 程序员 面试 后端

怎样评估选型一个企业软件产品?

明道云

Java开发视频教程!MySQL8

策划Java工程师

Java 程序员 面试 后端

Druid 独立服务器方式部署文档

HoneyMoose

十大排序算法--归并排序

Ayue、

排序算法 8月日更

手把手教你在Windows和Linux下安装Redis及了解Redis基本操作

Regan Yue

redis Linux windows 8月日更

oeasy教您玩转vim - 2 - # 使用帮助

o

vim

大佬分享开发经验!2021年华为Android面试真题解析

欢喜学安卓

android 程序员 面试 移动开发

Python代码阅读(第3篇):列表的最小公倍数

Felix

Python 编程 Code Programing 阅读代码

秒杀系统设计

Vincent

架构训练营

Java开发必须掌握!Java虚拟机(JVM

策划Java工程师

Java 程序员 面试 后端

Java开发面试问题,Java中高级核心知识全面解析(2)

策划Java工程师

Java 程序员 面试 后端

oeasy教您玩转vim - 1 - # 存活下来 🥊

o

【Flutter 专题】77 图解历史 Android Native 项目接入 Flutter Module

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

Flutter 的 runApp 与三棵树诞生流程源码分析

工匠若水

flutter android 8月日更

互联网寒冬!大厂Android开发面试解答

欢喜学安卓

android 程序员 面试 移动开发

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