Strategic Programming by Model Interpretation and Partial Evaluation

William R. Cook, Benjamin Delaware, Thomas Finsterbusch, Ali Ibrahim, Ben Wiedermann

abstract

In model-driven development, the use of both model translators and model interpreters is widespread. It is also wellknown that partial evaluation can turn an interpreter into a translator. In this paper we show that a simple online partial evaluator is effective at specializing a model interpreter with respect to a model to create a compiled model interpretation. Data models pose a particular problem, because it is not clear what a data model interpreter would do, given that data is generally considered to be passive. We show how a data model interpreter can be defined in an object-oriented style as a dynamic message-processing function. Partial evaluation can then be applied to this data model interpreter to create a static dispatch function, analogous to a normal static class definition. We also consider the case of user interface model interpreters, and show that partial evaluation and deforestation can produce good specialized code. The user interface interpreter illustrates a solution to integrating two modeling languages. The system described here is bootstrapped from Scheme, although the goal is to build a complete software development environment based on model interpreters.