Design Principles for Machine-Description Languages

Norman Ramsey and Jack Davidson and Mary Fernández

We have taken a federated approach to the design of domain-specific languages that support automatic generation of systems software. These languages are intended to help generate parts of software tools that manipulate machine instructions. This paper explains the goals and principles that have governed the design and implementation of these languages. The primary design goal for languages in the confederation is to ensure that the same machine descriptions can be used to help build a variety of different tools. Other goals include producing useful results from partial descriptions, providing mechanisms that build users' trust in descriptions, and making descriptions concise and readable. Our design and development of machine-description languages has been guided by a dozen language-design principles. Using examples both from our work and from others' work, we describe and illustrate each principle. Some of the principles are well known to the programming-language community and have been previously described in the literature, but many of the principles were not obvious from the beginning and have not been as well described in the literature. These principles have emerged from our goals and our application area. They will interest other researchers who design machine-description languages as well as other designers of domain-specific languages.

Full paper

The paper is available as US Letter PostScript (354K), US Letter PDF (324K), and US Letter TeX DVI (149K).