Generality—or Not—in a Domain-Specific Language (A Case Study)
March 2021

Slides for an invited keynote at the 2021 conference ( One-sentence abstract: This talk is an overview and critique of the (overall very successful) programming language used in BibTeX style (.bst) files, for the purpose of illustrating some general principles to keep in mind when designing domain-specific languages. Abstract for the keynote: In 2017 I took a look at a widely used programming language that had no name, so I called it “Computer Science Metanotation” (CSM), and I observed that it had grown in interesting and sometimes inconsistent ways. For this talk I will examine another, perhaps even more widely used language that also has no name. Unlike CSM, it has remained almost unchanged for the last 33 years—yet programmers continue to write new applications in it today and even attempt to broaden its programming style, despite the fact that it is an extremely domain-specific language (DSL) that clearly was not designed for growth. It is a functional language—or is it? We will explain the language briefly, then use it as a case study—based on my own experience in wrestling with it—to explore more general questions about language design. How can we find the right balance in a DSL between specificity (which can make it much easier to tackle the intended application domain) and generality (which can support language growth, new application domains, or just a broader view of the original domain)? To what extent should even a domain-specific language be self-aware?

Authors: Guy Steele

Venue: <programming> 2021 conference (


Hardware and Software, Engineered to Work Together