The reality is that 90% of the features they ask for boils down to adding just a simple if statement, and as soon as a DSL has a practical if statement it becomes turing complete.
If the other 10% of features are implemented, then any further change makes the DSL turing complete.
It's not even really `if` by itself, conditionals are good enough. Templates with for loops that can check if an index is the first or last can implement if statements. Also templates that can nest other templates recursively with a max recursion depth can also implement if.
You have to go out of your way to avoid turing completeness if you want to avoid a complexity explosion.
If the other 10% of features are implemented, then any further change makes the DSL turing complete.
It's not even really `if` by itself, conditionals are good enough. Templates with for loops that can check if an index is the first or last can implement if statements. Also templates that can nest other templates recursively with a max recursion depth can also implement if.
You have to go out of your way to avoid turing completeness if you want to avoid a complexity explosion.