Just about anyone who has programmed extensively in Ant probably know how it feels to have needed an if-statement or for-loop at some point in time. Or to keep state in some local variable.
Ant, as a declarative language, gives little help here. For control flow, you can bring in Ant-Contrib, yet as an Ant add-on it feels like a step in the wrong direction, since your XML code starts to look even stranger than before. To store state, you get global properties or path or fileset refs, which again are awkward to use, and with large build projects, it can be agonizing to find where a property value had originated.
Oh, did I already mention how much we hate programming in XML?
Ant has some great features, such as its target dependency engine and powerful tasks for pretty much any kind of build operation. We have retained those in Aardvark, while significantly easing code flow. No more macros or Java tasks - just the Gosu language.
I'll put this up on the Why section of the GitHub wiki soon.