What is the differences and similarities between Domain Specific Languages (DSL) and Domain Driven Design (DDD)?
Domain Driven Design (DDD) is a way of thinking and communicating about the problems and its solutions.
Domain Specific Language (DSL) is a way of writing code.
They're similar because they both start with the word "domain". That's it, I guess. :-)
I would argue that they are somehow related and not only by the word "domain". Once you have a good (domain-driven) design, it will surely help in creating a solid DSL.
"DDD does not specifically require the use of a DSL, though it could be used to help define a DSL." - Wikipedia
Wikipedia has a pretty clear definition for DSL:
The term domain-specific language (DSL) has become popular in recent years in software development to indicate a programming language or specification language dedicated to a particular problem domain, a particular problem representation technique, and/or a particular solution technique.
This can be implemented as a set of classes following some consistent pattern, some fancy C++ template magic, or a compiler/parser that interprets free text input to do what you want.
I think they are somehow related (as Christophe put it), but two totally different aspects. I wouldn't even dismiss jop's statement.
For very well written information on DSLs refer to Martin Fowler's set of pages on DSLs (work in progress), you may start with the example, or the definition. Another good read is his QandA.
DDD is based on the domain model and usually at least one abstraction level higher than the DSL. Both can exist without the other, and as Christophe already said, they can both be used in the same project.
Domain-Driven Design emphasizes the role of the problem domain as you create the fundamental vocabulary, concepts, and object model for the system being designed.
A Domain-Specific Language is a notation for specifying or implementing specific parts of the system, oriented to the needs of the practitioner in that domain (i.e. minimizing the "programmerese" aspects of most programming or specification languages).
The differences, one is an approach to building systems using a Domain Specific Language language (DSL) instead of a General Purpose Language and the other is an architectural approach (DDD) to designing and building systems.
The similarity is that they both focus on the specific domain.
One element of DDD can be seen as the ability to develop Ubiquitous Languages for talking with stakeholder about the domain. For the subset of those UL's that are both unambiguous and potentially executable, you may choose to implement them using an internal or external DSL.
Here's a video of me discussing this on the DomainDriven site:
http://domaindrivendesign.org/library/bell_gitlevich_2009
Best Wishes, Peter
I guess both have as its main focus reducing the noise in programming, DDD acts on semantic noise and DSLs in syntactic noise.
These may help understand my opinion:
http://fragmental.tw/2009/03/12/expessive-design-slides/
http://fragmental.tw/2008/04/20/domain-specific-languages-and-video-games/