The usual methodology of embedding domain-specific languages (DSLs) as libraries forces the DSL designer to commit to a single semantics. This precludes the subsequent addition of compilation, optimization or domain-specific analyses. We propose polymorphic embedding of DSLs, where many different interpretations of a DSL can be provided as reusable components, and show how polymorphic embedding can be realized in the programming language Scala. With polymorphic embedding, the static type-safety, modularity, composability and rapid prototyping of the embedded approach are reconciled with the flexibility attainable by external toolchains.
|polyemb.zip||accompanying source code to the paper|