The difference is really in the intention. Imperative DSLs usually specify what to do, and declarative DSLs specify what you want done.
— An imperative DSL specifies a list of steps to execute (to output text using a templating DSL, for example). With this style, you specify what should happen.
— A declarative DSL is a specification of a goal. This specification is then executed by the supporting infraestructure. With this style, you specify the intended result.
Building Domain Specific Languages in Boo