Everything old is new again. This "language oriented programming" stuff seems awfully like Lisp macros to me. The underlying concept behind Lisp macros is painfully simple --- code itself is a first-class object, just like an integer or a string. All this other stuff just falls naturally out of that single point. So you want a domain-specific language for your simulation? Just write the macro. Want domain-specific languages for traversing collections (or databases or XML files, or whatever?) Just write the macro. Want to control exactly how your code gets compiled? Just write the macro!