Are domain specific languages (DSLs) the long-awaited "silver bullet" for software engineering? Can DSL technology deliver its promise of greater productivity, higher quality, and enhanced maintainability? What are the design principles behind DSLs, and how does one implement them? What can go wrong, and how do we distingish success from failure?
These are some of the questions that will be addressed in this overview of DSL technology. We will argue the point of view that a well-designed DSL should be the ultimate abstraction for a particular application domain, capturing precisely the semantics of an application, no more and no less. Topics to be covered include the basic principles underlying DSLs, examples of successful DSLs, general design principles, the notion of a domain-specific embedded language, and the importance of software tools for implementing DSLs.