Hacker News new | ask | show | jobs
by michaelt 4896 days ago

  A built tool should allow (when needed) the full 
  flexibility of a Turing complete programming language. 
  Because eventually your project is probably going to need 
  it.
I've never seen a situation like this - but perhaps I've lived a sheltered life. Can anyone give me an example of when this would be a good design decision?
1 comments

You're generating configuration files from a database as part of your build.

OR

You're reading a file and using the details in that file to control your build.

OR

You need to loop through a set of properties and apply a specific update to each value before the build.

OR

You need to invoke complex build logic based on the platform you're building for (nested ifs).

etc.

There are lots of odd situations you end up in with real projects.

The flexibility this provides comes at the cost of build complexity though.

Obscure syntax and odd custom DSL's (>_> cmake, make, powershell) are bad because they introduce complexity and destroy the readability and maintainability of the build.

You basically need a test suite for your build code to make sure it's building correctly. Terrible.

...but, necessary. I'm not a java guy, but writing C and C++? You need to do this stuff all of the time. scons or cmake really make life a lot easier than trying to force Makefiles to do things with their obscure lambda syntax.

>You basically need a test suite for your build code to make sure it's building correctly

Absolutely, which is one of the best things about maven - because all your build steps are plugins written in standard Java, you can test it the same way you test your regular code.