BuildLanguage design 17 January 2004 Reactions

Addition: Jon Tirsen describes an interesting story about using Ruby to drive a complex ant build process.

Bruce Eckel's recent post on ant and make triggered me to share some of my thoughts about build languages. Both ant and make specify how builds happen, they are a language for describing builds. Both are pretty widely used and have been successful. Yet both run into limitations, with larger systems it's quite common to find people generating their ant/make files from other programs.

I think I'm agreeing with Bruce for the reason. Simple builds are easy to express as a series of tasks and dependencies. For such builds the facilities of ant/make work well. But more complex builds require conditional logic, and that requires more general programming language constructs - and that's where ant/make fall down.

Ant made the decision to use XML as its file format. At the time I thought it was a good choice. In those early days I was working with Matt Foemmel on a large project and he built a similar system to ant (ant didn't exist at the time and we needed it). He also picked XML as the language. It made sense to us because XML is a tolerable way of describing hierarchical data, and a hierarchy seemed to fit a build scripts demands. We've both concluded since that a programming language is more the way to go and that's not a good UseOfXml.

Since I do a fair bit of programming in Ruby, I've naturally started to play with Rake, a ruby make. The interesting thing about the rakefiles is that they are regular ruby programs with a few conventions and support to allow you to declare tasks and dependencies. I only have small tasks to work with it, and so far I find it very comfortable. Since it is a full blown programming language I would expect it to work well for larger builds, I already have found it handy to do things like loops, subroutines and list collection in my build files.


Links
home
bliki
feed 
Translations
Japanese
Spanish
Korean
Chinese
Thai
Categories
agile
design
dsl
leisure
refactoring
ruby
thoughtWorks
tools
uml
writing
Blog Roll
ThoughtBlogs
TW Alumni
Nicholas Carr
Steve Cook
Brian Foote
Simon Harris
Gregor Hohpe
/\ndy Hunt
Ralph Johnson
Patrick Logan
David Ing
Brian Marick
Jeremy Miller
Jimmy Nilsson
Samuel Pepys
Keith Ray
Johanna Rothman
Kathy Sierra
Dave Thomas