Language Workbench is a term I coined in 2005 to describe a new class of software development tool, designed to build software through a rich environment of multiple, integrated, DomainSpecificLanguages. These tools are still quite a way away from being mainstream, but development on them continues and continues to be interesting. They are one of the few things I feel could significantly change the programming landscape.
Language workbenches support the idea of Language-Oriented Programming, which is the notion of building a sofware system by identifying the various areas of the system and using (perhaps building) a Domain Specific Language for each area. The workbench both supports the definition of these languages and also integrating them together into a coherent whole.
To define the DSLs the workbench supports:
- Defining the schema for a Semantic Model for the language
- Defining one or more rich editing environments for the language
- Defining the behaviorial semantics for the language, through some mix of interpretation and code generation.
The editing environments are what makes these tools stand out. People have been making external DSLs for decades, but you edit these in a text editor. language workbenches look to take this much further, approaching the level of modern PostIntelliJ IDEs, or even beyond. Some language workbenches support editing in regular text, others use projectional editors that support structured text that needs no parsing, or diagrams, or both.
In 2005 I wrote a set of papers on Language Workbenches. Some of these thoughts need to be revised, but for the moment they are the best deeper discussion on them.