<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Observations from Uppsala &#187; Mike Shapiro</title>
	<atom:link href="http://jakob.engbloms.se/archives/tag/mike-shapiro/feed" rel="self" type="application/rss+xml" />
	<link>http://jakob.engbloms.se</link>
	<description>Computer Technology: Simulation, Virtualization, Virtual Platforms, Embedded, Multicore and Multiprocessing (by Jakob Engblom)</description>
	<lastBuildDate>Sun, 29 Jan 2012 19:45:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<image>
    <title>Observations from Uppsala</title>
    <url>http://jakob.engbloms.se/favicon.png</url>
    <link>http://jakob.engbloms.se</link>
    <width>32</width>
    <height>32</height>
    <description>Observations from Uppsala - http://jakob.engbloms.se</description>
    </image>		<item>
		<title>Mike Shapiro on Purpose-Built Languages</title>
		<link>http://jakob.engbloms.se/archives/747?&#038;owa_medium=feed&#038;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/747#comments</comments>
		<pubDate>Sun, 26 Apr 2009 07:58:38 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[Communications of the ACM]]></category>
		<category><![CDATA[Domain-specific languages]]></category>
		<category><![CDATA[Mike Shapiro]]></category>
		<category><![CDATA[purpose-built languages]]></category>
		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=747</guid>
		<description><![CDATA[In the April 2009 issue of Communications of the ACM, Mike Shapiro of Sun (or should we say Oracle now?) has an interesting technical article about what he calls &#8220;purpose-built languages&#8220;. The article was earlier published in ACM Queue. Essentially, it is about domain-specific languages. He describes how many of the most useful little languages [...]]]></description>
			<content:encoded><![CDATA[<p>In the April 2009 issue of <a href="http://www.acm.org/cacm">Communications of the ACM</a>, Mike Shapiro of Sun (or should we say Oracle now?) has an interesting technical article about what he calls &#8220;<a href="http://portal.acm.org/citation.cfm?id=1498765.1498781&amp;coll=ACM&amp;dl=ACM&amp;CFID=32026164&amp;CFTOKEN=89659518">purpose-built languages</a>&#8220;. The article was earlier published in <a href="http://mags.acm.org/queue/200901/?folio=18&amp;CFID=32026164&amp;CFTOKEN=89659518">ACM Queue</a>. Essentially, it is about domain-specific languages. He describes how many of the most useful little languages in use for the developmentof large systems have grown up without formal design, a grammar, or even a name.</p>
<p><span id="more-747"></span>His experience is just like mine: programmers create the tools they need to solve a problem, and over time, certain useful point solutions get generalized and suddenly appear as full-blown or semi-full-blown languages. He traces the interesting case of the UNIX &#8220;adb&#8221; debugger &#8220;macro language&#8221; from its beginnings as list of very simple operations in the PDP &#8220;odt&#8221; debugger (octal address plus single-character operator) to something that was used to encode quite complex OS kernel inspection operations in Solaris. And how he found it necessary to provide an implementation of the adb macros for the mdb debugger created for the Solaris 64-bit port. Good tools just won&#8217;t die&#8230;</p>
<p>Another point that I had missed but that really shows the prevalence of domain-specific languages in highly complex systems and advanced development practice is that Solaris 10 shipped with a few new languages added. The &#8220;D&#8221; language used for dTrace is the best-known example, but there were a few other ones as well&#8230; It sounds like the point I made at a DATE 2008 panel debate (last year, missed this year due to conflicts with other duties in my life) where I took issue with the idea that &#8220;embedded software is written in C or C++&#8221; and said that &#8220;any real system contains at least 10 different languages&#8221; and that &#8220;there is a zoo in there&#8221;.</p>
<p>The last important point, I think, made in the article is the common design pattern of taking the expression syntax of an existing language and use that as the core of a domain-specific language. C is especially popular for this, since it also makes compiling simple: just generate a C-language program containing the snippets of C expressions in your language (the yacc model). It also avoid reinventing the wheel&#8230;</p>
<p>So overall, I found this article a very interesting read, not the least thanks to its long historical view of language design and tools.</p>
<div class="simple_likebuttons_container_small">
      <div class="simple_likebuttons_googleplus">
        <g:plusone size="medium" count="false" href="http://jakob.engbloms.se/archives/747"></g:plusone>
      </div>
    
      <div class="simple_likebuttons_twitter simple_likebuttons_twitter_s">
        <a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-url="http://jakob.engbloms.se/archives/747" data-lang="en">Tweet</a>
      </div>
    
      <div class="simple_likebuttons_facebook">
        <div id="fb-root"></div>
        <script>(function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) {return;}
          js = d.createElement(s); js.id = id;
          js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, "script", "facebook-jssdk"));</script>
        <div class="fb-like" data-href="http://jakob.engbloms.se/archives/747" data-send="false" data-layout="button_count" data-show-faces="false" data-width="90"></div>
      </div>
    </div>]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/747/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

