You talk about Scala and Clojure, yet they agree with you about the advantages of DSLs, which is why both promote their features as <i>DSL-building toolkits</i>, and there are plenty of modules for those languages that provide DSLs.<p>The thing with DSLs is that almost by definition, unless you&#x27;re building something almost cookie-cutter, you can&#x27;t build a whole system with a single one. So Scala and Clojure are supposed to be the common ground in which you use and connect the programs made in these DSLs. Of course, since these are internal DSLs, it&#x27;s often hard or impossible to isolate the code written in the DSL from the rest of the program, so it&#x27;s hard to apply optimizations and such, but you still gain the code reduction that you talk about.