SPA Conference session: What makes a good domain specific language?

One-line description:Practical session designing a domain specific language and comparing and contrasting languages
 
Session format: Workshop (75 mins) [read about the different session types]
 
Abstract:The goal in this session is to look at what makes a good language. Issues like elegance, composability, a balance between making the language flexible and making it too large, etc.

We will start with a specific use case, break into pairs and develop a simple language (or set of languages) for implementing some (but probably not all) of the functionality. We'll then compare approaches, discussing the trade offs and why we made them.

The objective is to get the experience of specifically thinking about the design of a language without worrying about the details of implementation (internal vs. external, XML vs free text concrete syntax, etc).


 
Audience background:Anyone interested in language design. This is *not* just for compiler theory nuts. It's for anyone who wants to do a better job of developing Ubiquitous/Domain Specific Languages.
 
Benefits of participating:Get to discuss and learn from other peoples approaches to developing languages - whether to informally discuss requirements with clients or to implement DSLs to develop applications more quickly. We'll cover specific concepts like composability, "big enough" languages, and elements of elegance in language design as well as whatever comes out of the participants experiences of developing languages, notations and APIs.
 
Materials provided:Requirements doc to work from and some general thoughts on elegance in language design as a starting point for the conclusions.
 
Process:Introduce the requirements
Break into pairs to design languages
Introduce a second round of revisions
Present some thoughts on elegance in language design
Work in pairs to evolve languages
Double up pairs to show and tell languages and discuss (guided)
Presentation from teams of lessons learned
 
Detailed timetable:0.00-0.5 Introduce the requirements
0.05-0.20 Break into pairs to design languages
0.20-0.25 Discuss experiences/issues so far
0.25-0.30 Introduce a second round of revisions
0.30-0.35 Present some thoughts on elegance in language design
0.35-0.45 Work in pairs to evolve languages
0.45-0.55 Double up pairs to show and tell languages and discuss (guided)
0.55-0.70 Presentation from teams of lessons learned and discussion

 
Outputs:Sample languages, experiences in the language design, heuristics for language design from participants - blog posting plus email to participants.
 
History:I presented a similar session two years ago at SPA, but it had way too much theory and the example domain wasn't well enough designed, so participants got limited value from the session (it was my first SPA so I didn't really *get* the idea of interactive sessions).

With a couple of SPA's under my belt, I'd love to be able to revisit this topic, with a very carefully designed set of requirements so we can focus on some of the common issues that arise (what should go in the language vs. what should be custom code, should we have one language or many, do we take concepts from the business domain, the technology domain or both, etc).
 
Presenters
1. Peter Bell
SystemsForge
2. 3.