<?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; ACM Queue</title>
	<atom:link href="http://jakob.engbloms.se/archives/tag/acm-queue/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>The Adversarial Approach to Compilation</title>
		<link>http://jakob.engbloms.se/archives/1504?&#038;owa_medium=feed&#038;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1504#comments</comments>
		<pubDate>Sun, 02 Oct 2011 19:07:55 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[ACM Queue]]></category>
		<category><![CDATA[Communications of the ACM]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1504</guid>
		<description><![CDATA[Paul Henning-Kamp has written a series of columns for the ACM Queue and Communications of the ACM. He is  pointed, always controversial, and often quite funny. One recent column was called &#8220;The Most Expensive One-Byte Mistake&#8220;, which discusses the bad design decision of using null-terminated strings (with the associated buffer overrun risks that would have [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2008/08/acm-queue-logo.gif"><img class="alignleft size-full wp-image-249" style="margin: 5px 10px;" title="acm-queue-logo" src="http://jakob.engbloms.se/wp-content/uploads/2008/08/acm-queue-logo.gif" alt="" width="150" height="91" /></a>Paul Henning-Kamp has written a series of columns for the <a href="http://queue.acm.org">ACM Queue </a>and <a href="http://cacm.acm.org/">Communications of the ACM</a>. He is  pointed, always controversial, and often quite funny. One recent column was called &#8220;<a href="http://queue.acm.org/detail.cfm?id=2010365">The Most Expensive One-Byte Mistake</a>&#8220;, which discusses the bad design decision of using null-terminated strings (with the associated buffer overrun risks that would have been easily avoided with a length+data-style string format). Well worth a read. A key part of the article is the dual observation that compilers are starting to try to solve the efficiency problems of null-terminated strings &#8211; and that such heavily optimizing compilers quite often very hard to use.</p>
<p><span id="more-1504"></span>He has a wonderful line from an anonymous Convec C3800 programmer who accounted his experience with the optimizing compiler as &#8220;<em>having to program as if the compiler was my ex-wife&#8217;s lawyer</em>&#8220;. I can recognize and understand the sentiment. The C language, in particular, is full of corner cases where behavior is &#8220;undefined&#8221; or &#8220;implementation dependent&#8221;. The exact behavior of some statements is also pretty complex &#8211; and as a compiler writer, you end up having to work with the rules of the language like a lawyer works the law &#8211; the thinking is not all that different. And if you take this approach to the extreme, the description of the compiler as an adversarial lawyer is spot-on.</p>
<p>Unfortunately, it is quite easy in C (and trivial in C++) to wander into such territory without noticing and without doing anything that is obviously wrong for an average programmer. For example, <a href="http://jakob.engbloms.se/archives/1489">the program I described in my recent post about a bug demo</a> is strictly speaking using undefined behavior, and the compiler is theoretically free to generate a program that reformats the harddrive or does nothing at all. In practice, I don&#8217;t think compiler designers strive to generate truly creative unexpected results. Rather, if you detect unclear statement in the program, you would emit a warning.</p>
<p>Still, I can identify with this kind of adversarial relationship with a compiler. It really feels like being in a game with a <a href="http://en.wikipedia.org/wiki/Rules_lawyer">rules lawyer</a>, where you read the rules (programming language book) and try to figure out how to play the better than your opponent.</p>
<p>&nbsp;</p>
<div class="simple_likebuttons_container_small">
      <div class="simple_likebuttons_googleplus">
        <g:plusone size="medium" count="false" href="http://jakob.engbloms.se/archives/1504"></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/1504" 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/1504" 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/1504/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Pulling the Virtual Ethernet Plug</title>
		<link>http://jakob.engbloms.se/archives/248?&#038;owa_medium=feed&#038;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/248#comments</comments>
		<pubDate>Wed, 27 Aug 2008 09:25:00 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[computer simulation technology]]></category>
		<category><![CDATA[virtual machines]]></category>
		<category><![CDATA[virtual platforms]]></category>
		<category><![CDATA[ACM Queue]]></category>
		<category><![CDATA[bryan cantrill]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[ethernet]]></category>
		<category><![CDATA[fault injection]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=248</guid>
		<description><![CDATA[I just read the panel interview at the start of the latest issue (Number 4, 2008) of ACM Queue. Here, you have Bryan Cantrill of Sun (the man behind dTrace) bemoan the difficulty of testing faults. In particular: Part of the reason I&#8217;m interested in virtualization is as a development methodology. It has not delivered [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-249" style="margin: 5px 10px;" title="acm-queue-logo" src="http://jakob.engbloms.se/wp-content/uploads/2008/08/acm-queue-logo.gif" alt="" width="87" height="51" />I just read the <a href="http://mags.acm.org/queue/20080708/?pg=10&amp;pm=2">panel interview </a>at the start of <a href="http://mags.acm.org/queue/20080708/">the latest issue (Number 4, 2008) of ACM Queue</a>. Here, you have <a href="http://mags.acm.org/queue/20080708/?pg=14&amp;pm=2">Bryan Cantrill of Sun </a>(the man behind dTrace) bemoan the difficulty of testing faults. In particular:</p>
<blockquote><p>Part of the reason I&#8217;m interested in virtualization is as a development methodology. It has not delivered on this, but one of the things that I ask is can I use virtualization to automate someone pulling the Ethernet cable out of the jack? I can get a lot closer to simulating it if you let me create a toy virtual machine than I can running on the live machine.</p></blockquote>
<p>Well, <a href="http://www.virtutech.com/solutions/virtual_platform">this already exists</a>. It is a common feature to any virtual platform that is not a datacenter-oriented runtime engine like VmWare, Xen, LPAR, and its ilk. Doing fault injection is a primary use case for virtual platforms, especially for larger servers and systems featuring redundancy and fault tolerance.</p>
<div class="simple_likebuttons_container_small">
      <div class="simple_likebuttons_googleplus">
        <g:plusone size="medium" count="false" href="http://jakob.engbloms.se/archives/248"></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/248" 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/248" 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/248/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

