Chapter 11. Domain-Specific Languages in Scala
A Domain-Specific Language is a programming language that mimics the terms, idioms, and expressions used among experts in the targeted domain. Code written in a DSL reads like structured prose for the domain. Ideally, a domain expert with little experience in programming can read, understand, and validate this code. Sometimes, a domain expert might be able to write DSL code, even if he isn’t a professional programmer.
DSLs are a large topic. We’ll
only touch the surface of DSLs and Scala’s impressive support for them. For
more information on DSLs in general, see [Fowler2009], [Ford2009], and [Deursen]. The basic build tool we used for
the book’s examples, sake
, uses a DSL similar to the
venerable make
and its Ruby cousin
rake
. (See the README in the code download
archive for details.) For other examples of Scala “internal” and
“external” DSLs, see [Ghosh2008a] and [Ghosh2008b]. For some advanced work on
DSLs using Scala, [Hofer2008] explores polymorphic
substitution of alternative implementations for DSL abstractions, which is
useful for analysis, optimization, composition, etc.
Well-crafted DSLs offer several benefits:
- Encapsulation
A DSL hides implementation details and exposes only those abstractions relevant to the domain.
- Efficiency
Because implementation details are encapsulated, a DSL optimizes the effort required to write or modify code for application features.
- Communication
A DSL helps developers understand the domain and domain experts ...
Get Programming Scala now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.