Although I agree in spirit, I took a different design route in Ginger which supports multiple syntaxes and front-ends. By designing a generic syntax tree and defining its mapping into (a tight subset of) XML, I got away from the details of the back-end virtual machine. In fact Ginger has three very different back-ends, ported easily to another system (Poplog), and would be a days work to get it running in Java (badly - maybe a couple of weeks work to get it running well!)