IDEs can typically query a strongly-typed language for useful information without actually running the code. As long as the DSL uses static types, the IDE can just ask the compiler &#x2F; type-checker to tell it what&#x27;s going on and what portions of the source contribute to that meaning.<p>This is where the fuzziness of the phrase &quot;strongly typed&quot; becomes a bit of a problem, but the fundamental idea is that there are two levels of meaning in the program, one static, and one dynamic, and the static level produces useful info. There are lots of levels this can take. The most common is in an IDE for a language like C or Python; it compiles or style-checks the file, warning you about issues, but it doesn&#x27;t have any sense of what the program <i>means</i>. Another very common one is where you have non-code configuration files for GUI layout. You usually don&#x27;t need a Turing-complete language to describe your GUI, so putting it in some other format like XML means the IDE can render the GUI and let you make changes to it without having to actually run your code. Strong typing for DSLs is just another example of the same sort of thing. If you&#x27;re able to e.g. describe your models to the ORM entirely statically, it can figure out what a ton of your code means without running any of it.<p>I think this is basically what you mean by metaprogramming, except with the constraint that one of the two languages is pure and Turing-incomplete and doesn&#x27;t rely on external input. Then the IDE can safely run that language.