Firstly, I believe that all computer languages are domain specific. For most modern languages the domain is ‘Computer Science’. This is good because it gives software designers and developers better tools to cope with the complexities of modern requirements. It is also bad because the code we produce is incomprehensible to specialists in another domain.
So, what do I think is a DSL?
- A DSL is clearly readable by the domain expert.
- It does not have to be natural language, although for many domains that helps.
- The only scaffolding visible is domain scaffolding, not computer science.
- It must be complete enough to meet the domain needs – and no more complex than that.
- It is easy to create and edit.
No scaffolding requires implicit version control and change auditing. There are many good examples that meet the first four requirements, but the last two are less understood. The lack restricts DSL penetration. Unless a domain expert can use a DSL as easily as a point-and-click interface, they will not take the time. If changes are not monitored so we can see effects we would want the resulting DSLs in production.
I am working on both of these problems for uSDLC this year.
So, what is a DSL? It is a language readable by the domain specialist and by the computer so that the domain specialist gets the response they expect.