<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://commons.oreilly.com/wiki/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Domain-Specific Languages - Revision history</title>
		<link>http://commons.oreilly.com/wiki/index.php?title=Domain-Specific_Languages&amp;action=history</link>
		<description>Revision history for this page on the wiki</description>
		<language>en</language>
		<generator>MediaWiki 1.11.0</generator>
		<lastBuildDate>Wed, 19 Jun 2013 06:40:59 GMT</lastBuildDate>
		<item>
			<title>Kevlin at 05:02, 19 July 2009</title>
			<link>http://commons.oreilly.com/wiki/index.php?title=Domain-Specific_Languages&amp;diff=24927&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 05:02, 19 July 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;DSLs are commonly classified as either ''internal'' or ''external'':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;DSLs are commonly classified as either ''internal'' or ''external'':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Internal DSLs''' are written in a general purpose programming language whose syntax has been bent to look much more like natural language. This is easier for languages that offer more syntactic sugar and formatting possibilities (e.g., Ruby and Scala) than it is for others (e.g., Java) that do not. Most internal DSLs wrap existing APIs, libraries, or business code and provide a wrapper for less-mind bending access to the functionality. They are directly executable by just running them. Depending on the implementation and the domain, they are used to build data structures, define dependencies, run processes or tasks, communicate with other systems, or validate user input. The syntax of an internal DSL is constrained by the host language. There are many patterns &amp;amp;mdash; e.g., expression builder, method chaining, and annotation &amp;amp;mdash; that can help you to bend the host language to your DSL. If the host language doesn't require recompilation, an internal DSL can be developed quite quickly working side by side with a domain expert.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/ins&gt;'''Internal DSLs''' are written in a general purpose programming language whose syntax has been bent to look much more like natural language. This is easier for languages that offer more syntactic sugar and formatting possibilities (e.g., Ruby and Scala) than it is for others (e.g., Java) that do not. Most internal DSLs wrap existing APIs, libraries, or business code and provide a wrapper for less-mind bending access to the functionality. They are directly executable by just running them. Depending on the implementation and the domain, they are used to build data structures, define dependencies, run processes or tasks, communicate with other systems, or validate user input. The syntax of an internal DSL is constrained by the host language. There are many patterns &amp;amp;mdash; e.g., expression builder, method chaining, and annotation &amp;amp;mdash; that can help you to bend the host language to your DSL. If the host language doesn't require recompilation, an internal DSL can be developed quite quickly working side by side with a domain expert.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''External DSLs''' are textual or graphical expressions of the language &amp;amp;mdash; although textual DSLs tend to be more common than graphical ones. Textual expressions can be processed by a tool chain that includes lexer, parser, model transformer, generators, and any other type of post-processing. External DSLs are mostly read into internal models which form the basis for further processing. It is helpful to define a grammar (e.g., in EBNF). A grammar provides the starting point for generating parts of the tool chain (e.g., editor, visualizer, parser generator). For simple DSLs, a handmade parser may be sufficient &amp;amp;mdash; using, for instance, regular expressions. Custom parsers can become unwieldy if too much is asked of them, so it makes sense to look at tools designed specifically for working with language grammars and DSLs &amp;amp;mdash; e.g., openArchitectureWare, ANTlr, SableCC, AndroMDA. Defining external DSLs as XML dialects is also quite common, although readability is often an issue &amp;amp;mdash; especially for non-technical readers.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/ins&gt;'''External DSLs''' are textual or graphical expressions of the language &amp;amp;mdash; although textual DSLs tend to be more common than graphical ones. Textual expressions can be processed by a tool chain that includes lexer, parser, model transformer, generators, and any other type of post-processing. External DSLs are mostly read into internal models which form the basis for further processing. It is helpful to define a grammar (e.g., in EBNF). A grammar provides the starting point for generating parts of the tool chain (e.g., editor, visualizer, parser generator). For simple DSLs, a handmade parser may be sufficient &amp;amp;mdash; using, for instance, regular expressions. Custom parsers can become unwieldy if too much is asked of them, so it makes sense to look at tools designed specifically for working with language grammars and DSLs &amp;amp;mdash; e.g., openArchitectureWare, ANTlr, SableCC, AndroMDA. Defining external DSLs as XML dialects is also quite common, although readability is often an issue &amp;amp;mdash; especially for non-technical readers.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;You must always take the target audience of your DSL into account. Are they developers, managers, business customers, or end users? You have to adapt the technical level of the language, the available tools, syntax help (e.g., intellisense), early validation, visualization, and representation to the intended audience. By hiding technical details, DSLs can empower users by giving them the ability to adapt systems to their needs without requiring the help of developers. It also speeds up development because of the potential distribution of work after the initial language framework is in place. The language can be evolved gradually. There are also different migration paths for existing expressions and grammars available.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;You must always take the target audience of your DSL into account. Are they developers, managers, business customers, or end users? You have to adapt the technical level of the language, the available tools, syntax help (e.g., intellisense), early validation, visualization, and representation to the intended audience. By hiding technical details, DSLs can empower users by giving them the ability to adapt systems to their needs without requiring the help of developers. It also speeds up development because of the potential distribution of work after the initial language framework is in place. The language can be evolved gradually. There are also different migration paths for existing expressions and grammars available.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wikicontent:diff:version:1.11a:oldid:24925:newid:24927 --&gt;
&lt;/table&gt;</description>
			<pubDate>Sun, 19 Jul 2009 05:02:52 GMT</pubDate>			<dc:creator>Kevlin</dc:creator>			<comments>http://commons.oreilly.com/wiki/index.php/Talk:Domain-Specific_Languages</comments>		</item>
		<item>
			<title>Kevlin at 04:49, 19 July 2009</title>
			<link>http://commons.oreilly.com/wiki/index.php?title=Domain-Specific_Languages&amp;diff=24925&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 04:49, 19 July 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Whenever you listen to a discussion by experts in any domain , be it chess players, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;young mothers &lt;/del&gt;or insurance agents, you'll notice that their vocabulary &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt; &lt;/del&gt;is quite different from everyday language. That's &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;partly &lt;/del&gt;what domain specific languages are about. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Whenever you listen to a discussion by experts in any domain, be it chess players, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;kindergarten teachers, &lt;/ins&gt;or insurance agents, you'll notice that their vocabulary is quite different from everyday language. That's &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;part of &lt;/ins&gt;what domain&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;-&lt;/ins&gt;specific languages &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;(DSLs) &lt;/ins&gt;are about&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;: a specific domain has a specialized vocabulary to describe the things that are particular to that domain&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;They're &lt;/del&gt;about executable expressions in a language specific to a domain with limited vocabulary and grammar that is readable, understandable and hopefully &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;writable &lt;/del&gt;by domain experts. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;In the world of software, DSLs are &lt;/ins&gt;about executable expressions in a language specific to a domain with limited vocabulary and grammar that is readable, understandable&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/ins&gt;and &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;mdash; &lt;/ins&gt;hopefully &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;mdash; writeable &lt;/ins&gt;by domain experts&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. DSLs targeted at software developers or scientists have been around for a long time. For example, the Unix little languages found in configuration files and the languages created with the power of LISP macros are some of the older examples&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;DSLs &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;that were targeted at software developers &lt;/del&gt;or &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;scientists have been around for quite a time. The unix little languages found in configuration files or the languages created with the power of LISP macros are some of the older examples.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;DSLs &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;are commonly classified as either ''internal'' &lt;/ins&gt;or &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;''external'':&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;When talking about domain specific &lt;/del&gt;languages &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Martin Fowler makes the well accepted distinction between internal &lt;/del&gt;and &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;external &lt;/del&gt;DSLs and language &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;workbenches&lt;/del&gt;. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'''Internal DSLs''' are written in a general purpose programming language whose syntax has been bent to look much more like natural language. This is easier for &lt;/ins&gt;languages &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;that offer more syntactic sugar &lt;/ins&gt;and &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;formatting possibilities (e.g., Ruby and Scala) than it is for others (e.g., Java) that do not. Most internal &lt;/ins&gt;DSLs &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;wrap existing APIs, libraries, or business code &lt;/ins&gt;and &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;provide a wrapper for less-mind bending access to the functionality. They are directly executable by just running them. Depending on the implementation and the domain, they are used to build data structures, define dependencies, run processes or tasks, communicate with other systems, or validate user input. The syntax of an internal DSL is constrained by the host &lt;/ins&gt;language&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. There are many patterns &amp;amp;mdash; e.g., expression builder, method chaining, and annotation &amp;amp;mdash; that can help you to bend the host language to your DSL. If the host language doesn't require recompilation, an internal DSL can be developed quite quickly working side by side with a domain expert&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Internal &lt;/del&gt;DSLs''' are &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;written in a general purpose programming &lt;/del&gt;language &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;whose syntax has been bent &lt;/del&gt;to &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;look much &lt;/del&gt;more &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;like natural language&lt;/del&gt;. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;This is easier for some languages who have more syntactic sugar (like Ruby or Scala) &lt;/del&gt;and &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;much more difficult &lt;/del&gt;for &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;others &lt;/del&gt;(&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;like Java&lt;/del&gt;). &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Some people even see library APIs as a form &lt;/del&gt;of &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;a DSL &lt;/del&gt;(&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;but not a very fluent one&lt;/del&gt;). &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Most internal &lt;/del&gt;DSLs &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;wrap existing APIs&lt;/del&gt;, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;libraries or business code and provide &lt;/del&gt;a &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;wrapper &lt;/del&gt;for &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;a less mind bending access to the functionality&lt;/del&gt;. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;They are directly executable by just running &lt;/del&gt;them&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. Depending on the implementation they are used &lt;/del&gt;to &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;build data structures, define dependencies, run processes or tasks, communicate &lt;/del&gt;with &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;other systems or validate user input. There is a plethora patterns &lt;/del&gt;and &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;idioms that helps you to bend your host language&lt;/del&gt;. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Examples are: expression builder&lt;/del&gt;, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;method chaining&lt;/del&gt;, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;function sequence&lt;/del&gt;, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;object scoping&lt;/del&gt;, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;literal collection&lt;/del&gt;. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The language can be developed in the constraints of the host language. If the host language doesn't require recompilation&lt;/del&gt;, an &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;internal DSL can be developed quite quickly together with a domain expert&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;External &lt;/ins&gt;DSLs''' are &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;textual or graphical expressions of the &lt;/ins&gt;language &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;mdash; although textual DSLs tend &lt;/ins&gt;to &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;be &lt;/ins&gt;more &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;common than graphical ones&lt;/ins&gt;. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Textual expressions can be processed by a tool chain that includes lexer, parser, model transformer, generators, &lt;/ins&gt;and &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;any other type of post-processing. External DSLs are mostly read into internal models which form the basis &lt;/ins&gt;for &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;further processing. It is helpful to define a grammar &lt;/ins&gt;(&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;e.g., in EBNF&lt;/ins&gt;). &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;A grammar provides the starting point for generating parts &lt;/ins&gt;of &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;the tool chain &lt;/ins&gt;(&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;e.g., editor, visualizer, parser generator&lt;/ins&gt;). &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;For simple &lt;/ins&gt;DSLs, a &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;handmade parser may be sufficient &amp;amp;mdash; using, &lt;/ins&gt;for &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;instance, regular expressions&lt;/ins&gt;. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Custom parsers can become unwieldy if too much is asked of &lt;/ins&gt;them&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, so it makes sense &lt;/ins&gt;to &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;look at tools designed specifically for working &lt;/ins&gt;with &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;language grammars &lt;/ins&gt;and &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;DSLs &amp;amp;mdash; e.g&lt;/ins&gt;., &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;openArchitectureWare&lt;/ins&gt;, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;ANTlr&lt;/ins&gt;, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;SableCC&lt;/ins&gt;, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;AndroMDA&lt;/ins&gt;. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Defining external DSLs as XML dialects is also quite common&lt;/ins&gt;, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;although readability is often &lt;/ins&gt;an &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;issue &amp;amp;mdash; especially for non-technical readers&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'''External DSLs''' are mostly textual expressions &lt;/del&gt;of the language, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;graphical ones are much more difficult to handle &lt;/del&gt;(&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;especially in terms of versioning&lt;/del&gt;, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;storing in SCM and editing&lt;/del&gt;)&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. The textual expressions are processed by a tool chain that includes lexer&lt;/del&gt;, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;parser&lt;/del&gt;, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;model transformer&lt;/del&gt;, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;generators &lt;/del&gt;and &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;any other type of post-processing&lt;/del&gt;. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;External &lt;/del&gt;DSLs &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;are mostly read into internal models which form &lt;/del&gt;the &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;basis for further processing. For working with external DSLs it has been helpful &lt;/del&gt;to &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;define a grammar (e&lt;/del&gt;.&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;g. using EBNF) which provides &lt;/del&gt;the &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;starting point for generating parts &lt;/del&gt;of the &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;tool chain (e&lt;/del&gt;.&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;g. editor, visualizer, parser generator). For simple DSLs a hand made parser for instance using regular expressions may &lt;/del&gt;be &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;sufficient but most often becomes quickly unwieldy&lt;/del&gt;. There &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;are some tools for working with external DSLs - openArchitectureWare, ANTlr, SableCC, AndroMDA. Systems working with XML dialects as external DSLs &lt;/del&gt;are also &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;quite common, although they are not easily processable by (nontechnical) people. ANT build scripts are a good example &lt;/del&gt;for &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;that&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;You must always take the target audience of your DSL into account. Are they developers, managers, business customers, or end users? You have to adapt the technical level &lt;/ins&gt;of the language, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;the available tools, syntax help &lt;/ins&gt;(&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;e.g.&lt;/ins&gt;, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;intellisense&lt;/ins&gt;), &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;early validation&lt;/ins&gt;, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;visualization&lt;/ins&gt;, and &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;representation to the intended audience&lt;/ins&gt;. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;By hiding technical details, &lt;/ins&gt;DSLs &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;can empower users by giving them &lt;/ins&gt;the &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;ability to adapt systems &lt;/ins&gt;to &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;their needs without requiring the help of developers&lt;/ins&gt;. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;It also speeds up development because of &lt;/ins&gt;the &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;potential distribution &lt;/ins&gt;of &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;work after &lt;/ins&gt;the &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;initial language framework is in place&lt;/ins&gt;. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The language can &lt;/ins&gt;be &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;evolved gradually&lt;/ins&gt;. There are also &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;different migration paths &lt;/ins&gt;for &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;existing expressions and grammars available&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;You must always take the target audience of your DSL into account. Are they developers, managers, business customers or end customers? You have to adapt the technicality of the language, the available tools, syntax help (intellisense), early validation, visualization and representation to the intended consumers. Using DSLs can help raising the level of abstraction and thereby hiding technical details behind well known syntax and semantics. It empowers users as it gives them the ability to adapt systems to their needs without requiring the help of developers. It also speeds up development because of the potential distribution of work after the initial language framework is in place. The language can be evolved gradually. There are also different migration paths for existing expressions and grammars available.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;By [[Michael Hunger]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Further reading:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;This &lt;/ins&gt;work &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;is licensed under a &lt;/ins&gt;[http://&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;creativecommons&lt;/ins&gt;.&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;org&lt;/ins&gt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;licenses&lt;/ins&gt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;by&lt;/ins&gt;/3.&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;0&lt;/ins&gt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;us&lt;/ins&gt;/ &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Creative Commons Attribution &lt;/ins&gt;3] &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* Martin Fowler, DSL book (&lt;/del&gt;work &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;in progress) &lt;/del&gt;[http://&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;martinfowler&lt;/del&gt;.&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;com&lt;/del&gt;/&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;dslwip]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* Venkat (DSLs in Groovy) [http:&lt;/del&gt;//&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;www.javaworld.com/javaworld/jw-06-2008/jw-06-dsls-in-java-1.html]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* Markus Völter (MDD, oAW) [http://www.voelter.de/services/mdsd.html]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* Thoughtworks DSL podcast [http://feeds.feedburner.com/~r/thoughtworks/IT_Matters/~&lt;/del&gt;3&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;/284778933/thoughtworks_001_DSL_01&lt;/del&gt;.&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;m4a] [http:&lt;/del&gt;//&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;feeds.feedburner.com/~r/thoughtworks/IT_Matters/~&lt;/del&gt;3&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;/284778936/thoughtworks_003_DSL_02.m4a]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* MDD, DSL podcasts of Software Engineering radio [http://se-radio.net/tags/dsls&lt;/del&gt;]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;--&lt;/del&gt;[[&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;User:Michael Hunger|Michael Hunger&lt;/del&gt;]] &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;13:10, 29 January 2009 (PST)&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Back to &lt;/ins&gt;[[&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;97 Things Every Programmer Should Know&lt;/ins&gt;]] &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;home page&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Sun, 19 Jul 2009 04:49:06 GMT</pubDate>			<dc:creator>Kevlin</dc:creator>			<comments>http://commons.oreilly.com/wiki/index.php/Talk:Domain-Specific_Languages</comments>		</item>
		<item>
			<title>Kevlin: Domain Specific Languages moved to Domain-Specific Languages</title>
			<link>http://commons.oreilly.com/wiki/index.php?title=Domain-Specific_Languages&amp;diff=24921&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/index.php/Domain_Specific_Languages&quot; title=&quot;Domain Specific Languages&quot;&gt;Domain Specific Languages&lt;/a&gt; moved to &lt;a href=&quot;/wiki/index.php/Domain-Specific_Languages&quot; title=&quot;Domain-Specific Languages&quot;&gt;Domain-Specific Languages&lt;/a&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 04:08, 19 July 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/table&gt;</description>
			<pubDate>Sun, 19 Jul 2009 04:08:53 GMT</pubDate>			<dc:creator>Kevlin</dc:creator>			<comments>http://commons.oreilly.com/wiki/index.php/Talk:Domain-Specific_Languages</comments>		</item>
		<item>
			<title>Michael Hunger at 21:10, 29 January 2009</title>
			<link>http://commons.oreilly.com/wiki/index.php?title=Domain-Specific_Languages&amp;diff=23182&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 21:10, 29 January 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* Thoughtworks DSL podcast [http://feeds.feedburner.com/~r/thoughtworks/IT_Matters/~3/284778933/thoughtworks_001_DSL_01.m4a] [http://feeds.feedburner.com/~r/thoughtworks/IT_Matters/~3/284778936/thoughtworks_003_DSL_02.m4a]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* Thoughtworks DSL podcast [http://feeds.feedburner.com/~r/thoughtworks/IT_Matters/~3/284778933/thoughtworks_001_DSL_01.m4a] [http://feeds.feedburner.com/~r/thoughtworks/IT_Matters/~3/284778936/thoughtworks_003_DSL_02.m4a]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* MDD, DSL podcasts of Software Engineering radio [http://se-radio.net/tags/dsls]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* MDD, DSL podcasts of Software Engineering radio [http://se-radio.net/tags/dsls]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;--[[User:Michael Hunger|Michael Hunger]] 13:10, 29 January 2009 (PST)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wikicontent:diff:version:1.11a:oldid:23179:newid:23182 --&gt;
&lt;/table&gt;</description>
			<pubDate>Thu, 29 Jan 2009 21:10:25 GMT</pubDate>			<dc:creator>Michael Hunger</dc:creator>			<comments>http://commons.oreilly.com/wiki/index.php/Talk:Domain-Specific_Languages</comments>		</item>
		<item>
			<title>Michael Hunger at 21:08, 29 January 2009</title>
			<link>http://commons.oreilly.com/wiki/index.php?title=Domain-Specific_Languages&amp;diff=23179&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 21:08, 29 January 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 14:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 14:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Further reading:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Further reading:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* Martin Fowler, DSL book (work in progress) [martinfowler.com/dslwip]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* Martin Fowler, DSL book (work in progress) [&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;http://&lt;/ins&gt;martinfowler.com/dslwip]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* Venkat (DSLs in Groovy) [http://www.javaworld.com/javaworld/jw-06-2008/jw-06-dsls-in-java-1.html]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* Venkat (DSLs in Groovy) [http://www.javaworld.com/javaworld/jw-06-2008/jw-06-dsls-in-java-1.html]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* Markus Völter (MDD, oAW) [http://www.voelter.de/services/mdsd.html]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* Markus Völter (MDD, oAW) [http://www.voelter.de/services/mdsd.html]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* Thoughtworks DSL podcast [http://feeds.feedburner.com/~r/thoughtworks/IT_Matters/~3/284778933/thoughtworks_001_DSL_01.m4a] [http://feeds.feedburner.com/~r/thoughtworks/IT_Matters/~3/284778936/thoughtworks_003_DSL_02.m4a]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* Thoughtworks DSL podcast [http://feeds.feedburner.com/~r/thoughtworks/IT_Matters/~3/284778933/thoughtworks_001_DSL_01.m4a] [http://feeds.feedburner.com/~r/thoughtworks/IT_Matters/~3/284778936/thoughtworks_003_DSL_02.m4a]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* MDD, DSL podcasts of Software Engineering radio [http://se-radio.net/tags/dsls]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* MDD, DSL podcasts of Software Engineering radio [http://se-radio.net/tags/dsls]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wikicontent:diff:version:1.11a:oldid:23178:newid:23179 --&gt;
&lt;/table&gt;</description>
			<pubDate>Thu, 29 Jan 2009 21:08:44 GMT</pubDate>			<dc:creator>Michael Hunger</dc:creator>			<comments>http://commons.oreilly.com/wiki/index.php/Talk:Domain-Specific_Languages</comments>		</item>
		<item>
			<title>Michael Hunger: New page: Whenever you listen to a discussion by experts in any domain , be it chess players, young mothers or insurance agents, you'll notice that their vocabulary  is quite different from everyday...</title>
			<link>http://commons.oreilly.com/wiki/index.php?title=Domain-Specific_Languages&amp;diff=23178&amp;oldid=prev</link>
			<description>&lt;p&gt;New page: Whenever you listen to a discussion by experts in any domain , be it chess players, young mothers or insurance agents, you'll notice that their vocabulary  is quite different from everyday...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Whenever you listen to a discussion by experts in any domain , be it chess players, young mothers or insurance agents, you'll notice that their vocabulary  is quite different from everyday language. That's partly what domain specific languages are about. &lt;br /&gt;
&lt;br /&gt;
They're about executable expressions in a language specific to a domain with limited vocabulary and grammar that is readable, understandable and hopefully writable by domain experts. &lt;br /&gt;
&lt;br /&gt;
DSLs that were targeted at software developers or scientists have been around for quite a time. The unix little languages found in configuration files or the languages created with the power of LISP macros are some of the older examples.&lt;br /&gt;
&lt;br /&gt;
When talking about domain specific languages Martin Fowler makes the well accepted distinction between internal and external DSLs and language workbenches. &lt;br /&gt;
&lt;br /&gt;
'''Internal DSLs''' are written in a general purpose programming language whose syntax has been bent to look much more like natural language. This is easier for some languages who have more syntactic sugar (like Ruby or Scala) and much more difficult for others (like Java). Some people even see library APIs as a form of a DSL (but not a very fluent one). Most internal DSLs wrap existing APIs, libraries or business code and provide a wrapper for a less mind bending access to the functionality. They are directly executable by just running them. Depending on the implementation they are used to build data structures, define dependencies, run processes or tasks, communicate with other systems or validate user input. There is a plethora patterns and idioms that helps you to bend your host language. Examples are: expression builder, method chaining, function sequence, object scoping, literal collection. The language can be developed in the constraints of the host language. If the host language doesn't require recompilation, an internal DSL can be developed quite quickly together with a domain expert.&lt;br /&gt;
&lt;br /&gt;
'''External DSLs''' are mostly textual expressions of the language, graphical ones are much more difficult to handle (especially in terms of versioning, storing in SCM and editing). The textual expressions are processed by a tool chain that includes lexer, parser, model transformer, generators and any other type of post-processing. External DSLs are mostly read into internal models which form the basis for further processing. For working with external DSLs it has been helpful to define a grammar (e.g. using EBNF) which provides the starting point for generating parts of the tool chain (e.g. editor, visualizer, parser generator). For simple DSLs a hand made parser for instance using regular expressions may be sufficient but most often becomes quickly unwieldy. There are some tools for working with external DSLs - openArchitectureWare, ANTlr, SableCC, AndroMDA. Systems working with XML dialects as external DSLs are also quite common, although they are not easily processable by (nontechnical) people. ANT build scripts are a good example for that.&lt;br /&gt;
&lt;br /&gt;
You must always take the target audience of your DSL into account. Are they developers, managers, business customers or end customers? You have to adapt the technicality of the language, the available tools, syntax help (intellisense), early validation, visualization and representation to the intended consumers. Using DSLs can help raising the level of abstraction and thereby hiding technical details behind well known syntax and semantics. It empowers users as it gives them the ability to adapt systems to their needs without requiring the help of developers. It also speeds up development because of the potential distribution of work after the initial language framework is in place. The language can be evolved gradually. There are also different migration paths for existing expressions and grammars available.&lt;br /&gt;
&lt;br /&gt;
Further reading:&lt;br /&gt;
* Martin Fowler, DSL book (work in progress) [martinfowler.com/dslwip]&lt;br /&gt;
* Venkat (DSLs in Groovy) [http://www.javaworld.com/javaworld/jw-06-2008/jw-06-dsls-in-java-1.html]&lt;br /&gt;
* Markus Völter (MDD, oAW) [http://www.voelter.de/services/mdsd.html]&lt;br /&gt;
* Thoughtworks DSL podcast [http://feeds.feedburner.com/~r/thoughtworks/IT_Matters/~3/284778933/thoughtworks_001_DSL_01.m4a] [http://feeds.feedburner.com/~r/thoughtworks/IT_Matters/~3/284778936/thoughtworks_003_DSL_02.m4a]&lt;br /&gt;
* MDD, DSL podcasts of Software Engineering radio [http://se-radio.net/tags/dsls]&lt;/div&gt;</description>
			<pubDate>Thu, 29 Jan 2009 21:08:24 GMT</pubDate>			<dc:creator>Michael Hunger</dc:creator>			<comments>http://commons.oreilly.com/wiki/index.php/Talk:Domain-Specific_Languages</comments>		</item>
	</channel>
</rss>