<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>stuart kent's blog : Domain Specific Languages</title><link>http://blogs.msdn.com/stuart_kent/archive/tags/Domain+Specific+Languages/default.aspx</link><description>Tags: Domain Specific Languages</description><dc:language>en-GB</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>So what is a DSL anyway?</title><link>http://blogs.msdn.com/stuart_kent/archive/2009/06/23/so-what-is-a-dsl-anyway.aspx</link><pubDate>Tue, 23 Jun 2009 15:48:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9799361</guid><dc:creator>Stuart Kent</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/stuart_kent/comments/9799361.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stuart_kent/commentrss.aspx?PostID=9799361</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stuart_kent/rsscomments.aspx?PostID=9799361</wfw:comment><description>&lt;p&gt;The term Domain Specific Language (DSL) is a popular buzz-word at the moment. If you look at wikipedia you’ll see the following definition:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“In &lt;a href="http://en.wikipedia.org/wiki/Software_development"&gt;software development&lt;/a&gt;, a &lt;b&gt;domain-specific language&lt;/b&gt; (&lt;b&gt;DSL&lt;/b&gt;) is a &lt;a href="http://en.wikipedia.org/wiki/Programming_language"&gt;programming language&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Specification_language"&gt;specification language&lt;/a&gt; dedicated to a particular problem domain, a particular problem representation technique, and/or a particular solution technique. The concept isn't new—&lt;i&gt;special-purpose programming languages&lt;/i&gt; and all kinds of modeling/specification languages have always existed, but the term has become more popular due to the rise of &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_modeling"&gt;domain-specific modeling&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;The opposite is:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;a &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Programming_paradigm"&gt;general-purpose programming language&lt;/a&gt;&lt;/i&gt;, such as &lt;a href="http://en.wikipedia.org/wiki/C_(programming_language)"&gt;C&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Java_(programming_language)"&gt;Java&lt;/a&gt;, &lt;/li&gt;      &lt;li&gt;or a &lt;i&gt;general-purpose modeling language&lt;/i&gt; such as the &lt;a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language"&gt;UML&lt;/a&gt;.”&lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;The problem I have with this definition is that it’s hard to draw the boundary between what is general purpose and what is domain specific. Instead, I prefer to think of a language having different dimensions, and to categorize a language we need to place it on each of the dimensions relative to other languages. This leads to a much more fluid categorization system, but makes it easier to identify the similarities and differences between languages. Below is a diagram I produced recently for a talk showing three dimensions. I think there are more, but these three seem quite important. I put some examples on the diagram to illustrate.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/stuart_kent/WindowsLiveWriter/WhatisaDSLanyway_BE9C/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/stuart_kent/WindowsLiveWriter/WhatisaDSLanyway_BE9C/image_thumb.png" width="568" height="427" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And as a tool platform vendor, I’d like to provide facilities for creating and using languages in as many points in that 3-dimensional (though probably should be n-dimensional) space as possible. I also want to provide ways of moving between languages at different points in the space.&lt;/p&gt;  &lt;p&gt;What might other dimensions be? &lt;a href="http://www.martinfowler.com/bliki/DomainSpecificLanguage.html"&gt;Martin Fowler&lt;/a&gt; makes the further distinction between internal and external DSL, so perhaps that might be another, though in that case I might concede that the dimension is binary: external xor internal, and no points between. Another might be formal/informal dimension.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9799361" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stuart_kent/archive/tags/Domain+Specific+Languages/default.aspx">Domain Specific Languages</category><category domain="http://blogs.msdn.com/stuart_kent/archive/tags/DSL/default.aspx">DSL</category></item></channel></rss>