One means of biasing this balance in favor of expressive convenience is to design the language with a syntactic separation between specification of functionality and annotations to guide commitments that are elided in the specification. Notations may be adapted from conventions already used by practitioners in the field or may be newly invented. These advantages lead to greater productivity in writing, understanding, and modifying component specifications and tools that manipulate them. A component specification written in a domain specific notation provides a model of some mechanism or activity in the domain. There are two kinds of operations that application engineers must perform with these models.
Synthetic operations produce new models.
A particularly important kind of synthesis is translation from one model to another. One way to make domain specific notations operational is to translate to another, less-specific notation, which is itself operational. In particular, a path of translations leading to a general-purpose programming language makes a notation operational, with the added advantage of portability across multiple hardware platforms. Dependency, consistency and completeness analysis are examples. A good DSL often enables static analytical checks that could not be provided for a component specified in a more general langauge.