构建语言

2004年1月17日

Bruce Eckel 的 最新文章 关于 ant 和 make 促使我分享一些关于构建语言的想法。ant 和 make 都指定了构建的执行方式,它们是描述构建的语言。两者都得到了广泛应用并取得了成功。然而,两者都遇到了局限性,在大型系统中,人们通常会发现他们从其他程序生成 ant/make 文件。

我认为我同意 Bruce 的观点。简单的构建很容易表达为一系列任务和依赖项。对于此类构建,ant/make 的功能运作良好。但是更复杂的构建需要条件逻辑,这需要更通用的编程语言结构——而这就是 ant/make 失败的地方。

Ant 决定使用 XML 作为其文件格式。当时我认为这是一个不错的选择。在那些早期,我和 Matt Foemmel 在一个大型项目上合作,他构建了一个类似于 ant 的系统(当时 ant 还不存在,我们需要它)。他也选择了 XML 作为语言。这对我们来说是有意义的,因为 XML 是描述层次数据的可接受方式,而层次结构似乎适合构建脚本的需求。我们后来都得出结论,编程语言更适合,而 XML 不是一个好的 UseOfXml

由于我在 Ruby 中做了不少编程,我自然而然地开始使用 Rake,一个 Ruby 版本的 make。Rakefile 的有趣之处在于它们是带有几个约定和支持的常规 Ruby 程序,允许您声明任务和依赖项。我只用它来处理一些小任务,到目前为止,我发现它非常方便。由于它是一种完整的编程语言,我希望它能够很好地处理大型构建,我已经发现它在构建文件中进行循环、子例程和列表集合非常方便。