The impact of Domain Specific Languages (DSLs) on software design is considerable. They allow programs to be more concise than equivalent pro-grams written in a high-level programming lan-guages. They relieve programmers from making decisions about data-structure and algorithm de-sign, and thus allows solutions to be constructed quickly. Because DSL's are at a higher level of abstraction they are easier to maintain and reason about than equivalent programs written in a high-level language, and perhaps most importantly they can be written by domain experts rather than pro-grammers. The problem is that DSL implementation is costly and prone to errors, and that high level approaches to DSL implementation often produce inefficient systems....