Thinking about it, this is probably why using pure functional programming languages feels like writing an interpreter for some weird domain specific variant of lambda calculus.
Also, by this definition, is return-oriented programming the process of tricking a domain specific machine into being a different domain specific machine?