[译] Skylark 设计一瞥
原文:A glimpse of the design of Skylark 作者:Laurent Le Brun。原文发布日期:2017 年 3 月 21 日。 译注:本文保留原文的 Skylark 名称和 2017 年的技术语境,文中的“当前”等时间表述均以原文发表时为准。原文来自 Bazel 官方博客,其源码仓库采用 Apache License 2.0。本文为中文翻译。 本文介绍 Skylark 的设计。Skylark 是 Bazel 中用于描述构建的语言。 简史 很多年前,Google 使用 Makefile 构建代码。正如其他人也曾指出的那样,Makefile 很难应对大型代码库。一个临时方案是用 Python 脚本生成 Makefile:构建描述保存在 BUILD 文件中,以调用 Python 函数的形式表达。但这个方案实在太慢了,瓶颈就在 Make。 Blaze 项目于 2006 年启动,后来以 Bazel 的名字开源。它用一个简单的解析器读取 BUILD 文件,只支持函数调用、列表推导式和变量赋值。当 Blaze 无法直接解析某个 BUILD 文件时,就会先执行一个预处理步骤:用 Python 解释器运行用户编写的 BUILD 文件,生成一个简化版的 BUILD 文件,再交给 Blaze 使用。 这种方法很简单,也允许开发者创建自己的宏。但它又带来了许多维护、性能和安全方面的问题。由于 Blaze 本身无法解析这些 BUILD 文件,各类工具的开发也变得更加复杂。 在当前版本的 Bazel 中,我们移除了 Python 预处理步骤,让系统变得更加合理。不过,为了迁移现有代码库,我们保留了 Python 语法。无论如何,这似乎都是个好主意:许多人喜欢 BUILD 文件的语法,其他构建工具,例如 Buck、Pants 和 Please,也采用了这种语法。 ...