<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>eschew it all</title>
	<atom:link href="http://eschew.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://eschew.wordpress.com</link>
	<description>it's not the colors that matter</description>
	<lastBuildDate>Thu, 22 Dec 2011 16:23:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='eschew.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/2935275ef440c3e71c1ca881ddcd86ac?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>eschew it all</title>
		<link>http://eschew.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://eschew.wordpress.com/osd.xml" title="eschew it all" />
	<atom:link rel='hub' href='http://eschew.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Firefox Add-On Compatibility</title>
		<link>http://eschew.wordpress.com/2011/12/21/firefox-add-on-compatibility/</link>
		<comments>http://eschew.wordpress.com/2011/12/21/firefox-add-on-compatibility/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 04:27:37 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://eschew.wordpress.com/?p=335</guid>
		<description><![CDATA[It looks like Firefox is moving to a compatible-by-default model for extensions. I find this interesting, since I proposed this back in 2004 to no avail. To be clear, I don’t mean to say that compatible-by-default would have been the &#8230; <a href="http://eschew.wordpress.com/2011/12/21/firefox-add-on-compatibility/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=335&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It looks like Firefox is moving to a <a href="http://theunfocused.net/2011/11/19/solving-firefoxs-add-on-compatibility-problem/">compatible-by-default model for extensions</a>. I find this interesting, since I proposed this <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=251148">back in 2004</a> to no avail.</p>
<p>To be clear, I don’t mean to say that compatible-by-default would have been the right choice in 2004… Predictions about the past are almost hard as predictions about the future, and at least two major factors have changed since then. First, the state of the world for extensions now is more stable than it was in the Firefox 1.0 timeframe. And second, Firefox’s rapid release cycle exacerbates spurious compatibility problems, making this proposal significantly more attractive.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/335/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=335&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2011/12/21/firefox-add-on-compatibility/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
		<item>
		<title>The Lessons of Lucasfilm&#8217;s Habitat</title>
		<link>http://eschew.wordpress.com/2011/11/12/the-lessons-of-lucasfilms-habitat/</link>
		<comments>http://eschew.wordpress.com/2011/11/12/the-lessons-of-lucasfilms-habitat/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 05:32:46 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://eschew.wordpress.com/2011/11/12/the-lessons-of-lucasfilms-habitat/</guid>
		<description><![CDATA[We were initially our own worst enemies in this undertaking, victims of a way of thinking to which we engineers are dangerously susceptible. This way of thinking is characterized by the conceit that all things may be planned in advance &#8230; <a href="http://eschew.wordpress.com/2011/11/12/the-lessons-of-lucasfilms-habitat/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=334&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<blockquote><p>We were initially our own worst enemies in this undertaking, victims of a way of thinking to which we engineers are dangerously susceptible. This way of thinking is characterized by the conceit that all things may be planned in advance and then directly implemented according to the plan&#8217;s detailed specification. For persons schooled in the design and construction of systems based on simple, well-defined and well-understood foundation principles, this is a natural attitude to have.</p>
</blockquote>
<p><a href="http://www.fudco.com/chip/lessons.html">http://www.fudco.com/chip/lessons.html</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/334/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=334&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2011/11/12/the-lessons-of-lucasfilms-habitat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
		<item>
		<title>I wonder what Intel is up to?</title>
		<link>http://eschew.wordpress.com/2011/03/07/i-wonder-what-intel-is-up-to/</link>
		<comments>http://eschew.wordpress.com/2011/03/07/i-wonder-what-intel-is-up-to/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 06:26:28 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://eschew.wordpress.com/2011/03/07/i-wonder-what-intel-is-up-to/</guid>
		<description><![CDATA[&#160; http://cufp.galois.com/2007/slides/AnwarGhuloum.pdf “A proposed long term solution: a new functional language that features implicit parallelism, dependent typing, and an effects type system” “We are also working with an ISV on a compiler for a parallel functional language - Strict, but &#8230; <a href="http://eschew.wordpress.com/2011/03/07/i-wonder-what-intel-is-up-to/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=333&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p><a href="http://cufp.galois.com/2007/slides/AnwarGhuloum.pdf">http://cufp.galois.com/2007/slides/AnwarGhuloum.pdf</a></p>
<p>“A proposed long term solution: a new functional language that features implicit parallelism, dependent typing, and an effects type system”</p>
<p>“We are also working with an ISV on a compiler for a parallel functional language    <br />- Strict, but not call by value for implicit parallelism (maybe     <br />with lightweight annotations)     <br />- Arrays and array comprehensions for data parallelism     <br />- Effects system to contain impure features     <br />- Atomic for state updates”</p>
<p>&#160;</p>
<p><a href="http://cufp.org/conference/sessions/2010/functional-language-compiler-experiences-intel">http://cufp.org/conference/sessions/2010/functional-language-compiler-experiences-intel</a></p>
<p>“For five years Intel&#8217;s Programming Systems Lab (PSL) has been collaborating with an external partner on a new functional programming language designed for productivity on many-core processors. While the language is not yet public, this talk outlines motivations behind the language and describes our experiences in implementing it using a variety of functional languages. The reference interpreter is written in Haskell and compiled with GHC while PSL&#8217;s performance implementation is written in SML and compiled with Mlton. We have also generated Scheme code compiled with PLT Scheme as part of a prototyping effort.”</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/333/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/333/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/333/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/333/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/333/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/333/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/333/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=333&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2011/03/07/i-wonder-what-intel-is-up-to/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
		<item>
		<title>A Small Example Illustrating Why Unification-Based Type Inference Is Not Always The Most User-Friendly Choice</title>
		<link>http://eschew.wordpress.com/2011/02/13/a-small-example-illustrating-why-unification-based-type-inference-is-not-always-the-most-user-friendly-choice/</link>
		<comments>http://eschew.wordpress.com/2011/02/13/a-small-example-illustrating-why-unification-based-type-inference-is-not-always-the-most-user-friendly-choice/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 00:12:42 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://eschew.wordpress.com/2011/02/13/a-small-example-illustrating-why-unification-based-type-inference-is-not-always-the-most-user-friendly-choice/</guid>
		<description><![CDATA[let base = 10 let bitsPerDigit = logBase 2.0 (fromIntegral base) let activeBits = fromIntegral $ ceiling (bitsPerDigit * (Prelude.length "123")) There's a missing fromIntegral above, which causes GHC to underline logBase and complain that it has no instance for &#8230; <a href="http://eschew.wordpress.com/2011/02/13/a-small-example-illustrating-why-unification-based-type-inference-is-not-always-the-most-user-friendly-choice/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=326&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<pre><code>let base = 10
let bitsPerDigit = logBase 2.0 (fromIntegral base)
let activeBits = fromIntegral $
  ceiling (bitsPerDigit * (Prelude.length "123"))
</pre>
<p></code></p>
<p>There's a missing <code>fromIntegral</code> above, which causes GHC to underline <code>logBase</code> and complain that it has no instance for <code>(Floating Int)</code>. This is, on the face of things, completely mystifying. Both parameters are “obviously” floating! A second error points to <code>ceiling</code>, saying no instance for <code>(RealFrac Int)</code>.</p>
<p>The second error is the more suggestive one, since the problem is that the type of <code>*</code> causes GHC to equate the type of <code>bitsPerDigit</code> with that of <code>(Prelude.length clean)</code>, i.e. <code>Int</code>.&nbsp; But it’s more than a little strange to force the programmer to reason about their code in the same order that the type checker does!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/326/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=326&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2011/02/13/a-small-example-illustrating-why-unification-based-type-inference-is-not-always-the-most-user-friendly-choice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
		<item>
		<title>Comment on Comments</title>
		<link>http://eschew.wordpress.com/2011/02/12/comment-on-comments/</link>
		<comments>http://eschew.wordpress.com/2011/02/12/comment-on-comments/#comments</comments>
		<pubDate>Sat, 12 Feb 2011 10:34:23 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://eschew.wordpress.com/2011/02/12/comment-on-comments/</guid>
		<description><![CDATA[OK: if (vars.empty()) { // Store null env pointer if environment is empty builder.CreateStore( llvm::ConstantPointerNull::getNullValue( clo_env_slot-&#62;getType() -&#62;getContainedType(0)), clo_env_slot, /* isVolatile= */ false); } &#160; Better: if (vars.empty()) { storeNullPointerToSlot(clo_env_slot); }<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=323&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>OK:</p>
<pre><code>if (vars.empty()) {
  // Store null env pointer if environment is empty
  builder.CreateStore(
      llvm::ConstantPointerNull::getNullValue(
          clo_env_slot-&gt;getType()
             -&gt;getContainedType(0)),
      clo_env_slot,
      /* isVolatile= */ false);
}</code></pre>
<p>&#160;</p>
<p>Better:</p>
<pre><code>if (vars.empty()) {
  storeNullPointerToSlot(clo_env_slot);
}</code></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/323/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/323/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/323/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/323/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/323/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/323/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/323/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=323&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2011/02/12/comment-on-comments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
		<item>
		<title>Citation Chains</title>
		<link>http://eschew.wordpress.com/2010/09/03/citation-chains/</link>
		<comments>http://eschew.wordpress.com/2010/09/03/citation-chains/#comments</comments>
		<pubDate>Sat, 04 Sep 2010 04:15:02 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://eschew.wordpress.com/2010/09/03/citation-chains/</guid>
		<description><![CDATA[Here’s a fun game to play on Google Scholar: Search for a relatively old paper in your field of choice. It will, presumably, be the top result. Note the number N in the “Cited by N” link under the top &#8230; <a href="http://eschew.wordpress.com/2010/09/03/citation-chains/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=321&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Here’s a fun game to play on Google Scholar:</p>
<ol>
<li>Search for a relatively old paper in your field of choice. It will, presumably, be the top result. </li>
<li>Note the number N in the “Cited by N” link under the top result’s abstract. Also note the year of publication. </li>
<li>Click the “Cited by N” link. </li>
<li>GOTO 2. </li>
</ol>
<p>For example, here’s what results from searching for Luca Cardelli’s paper <a href="http://www.lucacardelli.name/Papers/TypeType.A4.pdf">A polymorphic lambda-calculus with Type : Type</a>:</p>
<table border="0" cellspacing="0" cellpadding="2" width="499">
<tbody>
<tr>
<td valign="top" width="272">Paper Name</td>
<td valign="top" width="68">Pub          <br />Date</td>
<td valign="top" width="77">Cited          <br />by &lt;N&gt;</td>
<td valign="top" width="80">Citations          <br />per year</td>
</tr>
<tr>
<td valign="top" width="272"><a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.28.3313&amp;rep=rep1&amp;type=pdf">A polymorphic lambda-calculus with Type: Type</a></td>
<td valign="top" width="68">1986</td>
<td valign="top" width="77">72</td>
<td valign="top" width="80">4</td>
</tr>
<tr>
<td valign="top" width="272"><a href="ftp://ftp.inria.fr/INRIA/publication/publi-pdf/RR/RR-0530.pdf">The calculus of constructions</a></td>
<td valign="top" width="68">1986</td>
<td valign="top" width="77">1053</td>
<td valign="top" width="80">44</td>
</tr>
<tr>
<td valign="top" width="272"><a href="http://portal.acm.org/citation.cfm?id=138027.138060">A framework for defining logics</a></td>
<td valign="top" width="68">1993</td>
<td valign="top" width="77">1155</td>
<td valign="top" width="80">68</td>
</tr>
<tr>
<td valign="top" width="272"><a href="http://portal.acm.org/citation.cfm?id=263699.263712">Proof-carrying code</a></td>
<td valign="top" width="68">1997</td>
<td valign="top" width="77">1873</td>
<td valign="top" width="80">145</td>
</tr>
<tr>
<td valign="top" width="272"><a href="http://portal.acm.org/citation.cfm?id=945462">Xen and the art of virtualization</a></td>
<td valign="top" width="68">2003</td>
<td valign="top" width="77">2375</td>
<td valign="top" width="80">340</td>
</tr>
<tr>
<td valign="top" width="272"><a href="http://www.springerlink.com/index/uu818507883x0857.pdf">Globus toolkit version 4: Software for service-oriented systems</a></td>
<td valign="top" width="68">2006</td>
<td valign="top" width="77">1179</td>
<td valign="top" width="80">295</td>
</tr>
<tr>
<td valign="top" width="272"><a href="http://portal.acm.org/citation.cfm?id=1132952.1132955">A taxonomy of data grids for distributed data sharing, management, and processing</a></td>
<td valign="top" width="68">2006</td>
<td valign="top" width="77">175</td>
<td valign="top" width="80">88</td>
</tr>
<tr>
<td valign="top" width="272"><a href="http://www3.interscience.wiley.com/journal/117935012/abstract">A toolkit for modelling and simulating data Grids: an extension to GridSim</a></td>
<td valign="top" width="68">2008</td>
<td valign="top" width="77">38</td>
<td valign="top" width="80">20</td>
</tr>
<tr>
<td valign="top" width="272"><a href="http://www.computer.org/portal/web/csdl/doi/10.1109/ANSS-41.2008.35">Service and utility oriented distributed computing systems</a> […]</td>
<td valign="top" width="68">2008</td>
<td valign="top" width="77">11</td>
<td valign="top" width="80">4</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p>It’s sort of nifty to see the “arch” of citations, and citations/year, over time.</p>
<p>Other interesting searches:</p>
<ul>
<li>program slicing </li>
<li>featherweight </li>
</ul>
<p>Not very interesting:</p>
<ul>
<li>grain elevators </li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/321/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/321/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/321/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/321/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/321/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/321/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/321/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=321&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2010/09/03/citation-chains/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
		<item>
		<title>Coroutine Performance</title>
		<link>http://eschew.wordpress.com/2010/08/12/coroutine-performance/</link>
		<comments>http://eschew.wordpress.com/2010/08/12/coroutine-performance/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 22:36:13 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://eschew.wordpress.com/2010/08/12/coroutine-performance/</guid>
		<description><![CDATA[I was curious this afternoon about how fast (or slow) coroutines can be. So I wrote a small microbenchmark in C, using libcoro’s&#160; handwritten-assembly implementation of stack switching for symmetric coroutines. The benchmark builds a complete binary tree of configurable &#8230; <a href="http://eschew.wordpress.com/2010/08/12/coroutine-performance/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=320&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was curious this afternoon about how fast (or slow) coroutines can be. So I wrote a small microbenchmark in C, using <a href="http://software.schmorp.de/pkg/libcoro.html">libcoro</a>’s&#160; handwritten-assembly implementation of stack switching for symmetric coroutines.</p>
<p>The benchmark builds a complete binary tree of configurable size, then visits it twice. First, a conventional recursively-written function takes the tree root and a function pointer, and calls the function pointer to process each value stored in the tree.</p>
<p>The benchmark next re-visits the tree with the iteration encapsulated by a Lua-style asymmetric coroutine class, which <code>yield()</code>s tree node values back to the main routine.</p>
<p>One interesting operational consequence of doing the recursive visiting inside the coroutine is that the main program stack remains at constant depth for every processed node. This constant-stack-space property is also an effect of CPS transformations – not surprising, since both continuations and coroutines are general control abstractions.</p>
<p>Anyways, I found that when compiled with <kbd>–O2</kbd> (gcc 4.4.3) and run on a Core 2, the overhead of using <code>resume()</code>/<code>yield()</code> compared to <code>call</code>/<code>return</code> was about 110 cycles per <code>yield()</code>. That cost is on par with loading a single word from RAM. Stack switching is an impressively efficient way of implementing a feature that lends significant flexibility and power to a language!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/320/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=320&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2010/08/12/coroutine-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
		<item>
		<title>ANTLR Grammar Tip: LL(*) and Left Factoring</title>
		<link>http://eschew.wordpress.com/2010/08/01/antlr-grammar-tip-ll-and-left-factoring/</link>
		<comments>http://eschew.wordpress.com/2010/08/01/antlr-grammar-tip-ll-and-left-factoring/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 19:56:20 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://eschew.wordpress.com/2010/08/01/antlr-grammar-tip-ll-and-left-factoring/</guid>
		<description><![CDATA[Suppose you wish to have ANTLR recognize non-degenerate tuples of expressions, like (x, y) or (f(g), a, b) but not (f) or (). Trailing commas are not allowed. The following formulation of such a rule will likely elicit a complaint &#8230; <a href="http://eschew.wordpress.com/2010/08/01/antlr-grammar-tip-ll-and-left-factoring/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=319&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Suppose you wish to have ANTLR recognize non-degenerate tuples of expressions, like <code>(x, y)</code> or <code>(f(g), a, b)</code> but not <code>(f)</code> or <code>()</code>. Trailing commas are not allowed. The following formulation of such a rule will likely elicit a complaint (“rule tuple has non-LL(*) decision due to recursive rule invocations reachable from alts 1,2; …”):</p>
<p><code>tuple : '(' (expr ',')+ expr ')' ;</code></p>
<p>ANTLR’s error message seems unhelpful at first glance, but it’s trying to point you in the right direction. What ANTLR is saying is that after it reaches a comma, it doesn’t know whether it should expect <code>expr ')'</code> or <code>expr ','</code>, and parsing <code>expr</code> could requiring looking at an arbitrary number of tokens. ANTLR recommends left-factoring, but the structure of the rule as written doesn’t make it clear what needs to be factored. Re-writing the rule to make it closer to ANTLR’s view makes it clearer what the problem is:</p>
<p><code>tuple_start : '(' tuple_continue;      <br />tuple_continue       <br />&#160;&#160;&#160; :&#160;&#160;&#160; ( expr ',' tuple_continue       <br />&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; expr ')');</code></p>
<p>Now it’s more obvious where the left-factoring needs to be applied, and how to do it by writing <code>expr</code> once, leaving only the choice of seeing a comma or a close-paren:</p>
<p><code>tuple_start : '(' tuple_continue;      <br />tuple_continue       <br />&#160;&#160;&#160; :&#160;&#160;&#160; expr ( ',' tuple_continue       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | ')'&#160; );       <br /></code></p>
<p>The rewritten expansion corresponds to an alternative structuring of the tuple rule that will satisfy ANTLR:</p>
<p><code>tuple : '(' expr (',' expr)+ ')';</code></p>
<p>The ANTLR wiki has a page on <a href="http://www.antlr.org/wiki/display/ANTLR3/How+to+remove+global+backtracking+from+your+grammar">removing global backtracking from ANTLR grammars</a>, which has a nice presentation of how to do left-factoring when the opportunity is obvious.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/319/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/319/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/319/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/319/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/319/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/319/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/319/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=319&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2010/08/01/antlr-grammar-tip-ll-and-left-factoring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
		<item>
		<title>O(n^1.2)</title>
		<link>http://eschew.wordpress.com/2010/03/27/on1-2/</link>
		<comments>http://eschew.wordpress.com/2010/03/27/on1-2/#comments</comments>
		<pubDate>Sat, 27 Mar 2010 21:52:01 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://eschew.wordpress.com/2010/03/27/on1-2/</guid>
		<description><![CDATA[I was reviewing Ras Bodik&#8217;s slides on parallel browsers and noticed in the section on parallel parsing that chart parsers like CYK and Earley are theoretically O(n^3) in time, but in practice it’s more like O(n^1.2). I wondered: wait, what &#8230; <a href="http://eschew.wordpress.com/2010/03/27/on1-2/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=318&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was reviewing <a href="http://www.cs.berkeley.edu/~cgjones/papers/intel-browser-2007.08.pdf">Ras Bodik&#8217;s slides on parallel browsers</a> and noticed in the section on parallel parsing that chart parsers like CYK and Earley are theoretically O(n^3) in time, but in practice it’s more like O(n^1.2).</p>
<p>I wondered: wait, what does O(n^1.2) mean for practical input sizes? Obviously for large enough n, any exponential will be worse than, say, O(n log n), but what’s the cutoff? So, I turned to the handy <a href="http://www.walterzorn.com/grapher/grapher_e.htm">Online Function Grapher</a> and saw this:</p>
<p><a href="http://eschew.files.wordpress.com/2010/03/nlogn.png"><img style="display:block;float:none;margin-left:auto;margin-right:auto;border-width:0;" title="n^1.2 vs n lg n" border="0" alt="n^1.2 vs n lg n" src="http://eschew.files.wordpress.com/2010/03/nlogn_thumb.png?w=391&#038;h=484" width="391" height="484" /></a> </p>
<p>That is, for n less than 5 million, n^1.2 &lt; n lg n, and they remain close up to about n = 9 million. So if Bodik’s estimate holds, chart parsing could indeed be a viable parsing strategy for documents of up to several megabytes. Happily, this limit size matches the current and expected sizes of web pages to a T.</p>
<p>The blue line at the bottom shows linear growth. It’s all too easy to think of linearithmic growth as being “almost as good” as linear growth. To quote <a href="http://www.canonware.com/~ttt/2008/07/overzealous-use-of-my-red-black-tree.html">Jason Evans</a> discussing how replacing his memory allocator’s log-time red-black tree operations with&#160; constant-time replacements yielded appreciable speedups: </p>
<blockquote><p>“In essence, my initial failure was to disregard the difference between a O(1) algorithm and a O(lg n) algorithm. Intuitively, I think of logarithmic-time algorithms as fast, but constant factors and large n can conspire to make logarthmic time not nearly good enough.”</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/318/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/318/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/318/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/318/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/318/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/318/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/318/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/318/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/318/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/318/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/318/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/318/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/318/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/318/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=318&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2010/03/27/on1-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>

		<media:content url="http://eschew.files.wordpress.com/2010/03/nlogn_thumb.png" medium="image">
			<media:title type="html">n^1.2 vs n lg n</media:title>
		</media:content>
	</item>
		<item>
		<title>Thirty Inches a Year</title>
		<link>http://eschew.wordpress.com/2010/03/04/thirty-inches-a-year/</link>
		<comments>http://eschew.wordpress.com/2010/03/04/thirty-inches-a-year/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 20:23:09 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://eschew.wordpress.com/2010/03/04/thirty-inches-a-year/</guid>
		<description><![CDATA[Next week is the one-year anniversary (if you will) of my purchase of a Dell 3007WFP-HC monitor. I snagged a refurbished model for about 60% of the going retail price. While I’m overall happy with the purchase, and do not &#8230; <a href="http://eschew.wordpress.com/2010/03/04/thirty-inches-a-year/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=315&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Next week is the one-year anniversary (if you will) of my purchase of a Dell 3007WFP-HC monitor. I snagged a refurbished model for about 60% of the going retail price.</p>
<p>While I’m overall happy with the purchase, and do not regret it, the pragmatics of such a large monitor have turned out to be not quite as rosy as I had initially expected.</p>
<p>The good:</p>
<ul>
<li>With Chrome’s minimal UI, I can fit two vertically-maximized PDFs on the screen at once, or three if I squeeze them down to “merely” life-size. (The screen is about 25% taller and 3 times wider than a sheet of 8.5 x 11” paper). Making it easier to read research papers was one of my reasons for getting the screen, and this aspect has worked out nicely. </li>
<li>Eclipse and Visual Studio will eat as much screen space as you can give them. Having a 30” monitor means getting two pages of code side-by-side instead of just one. A portrait-mode 24” monitor at 1200 x 1920 can show one page with 100 vertical lines of code; 2560 x 1600 shows two pages with 80 vertical lines of code. </li>
<li>Two displays are easier to drive from one graphics card than three.&#160; This means that a thirty inch monitor plus one is easier to set up than three smaller displays.</li>
</ul>
<p>The bad:</p>
<ul>
<li>Managing four million pixels turns out to be much more difficult than managing two million pixels. Because I have so much space, I tend to be less disciplined about keeping fewer windows open. I have about 150 Chrome tabs spread across 15 top level windows, plus six PuTTY sessions and six Explorer windows. I sometimes feel like I need a machete to hack my way through the jungle I created. There are apps that try to help keep windows aligned and orderly, but I haven’t managed to use them successfully. </li>
<li>It’s hard to find wallpaper for 30” displays! </li>
<li>The sweet spot for monitor prices on a pixels-per-dollar scale is (still) at 24” monitors. For less than the price of a heavily discounted refurbished 30” monitor, you can get two 24” monitors, and put one or both in portrait mode. For the price of a <em>new </em>30” display, you can get a smaller monitor or two and a desktop or laptop to go along with it… </li>
</ul>
<p>Would I recommend a 30” monitor to fellow programmers? I’m not sure. Two 24” monitors, or a 27” and a 24”, might make more sense. It depends on your personal opportunity cost for the extra premium over a nice 24” monitor. That extra money could be a few extra cores and double the RAM, or a dedicated box for running tests, or a nice suit and wool pea coat.</p>
<p>All in all, the upgrade from 20” to 24” made a much bigger difference than the upgrade from 24” to 30”. Make of that what you will.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/315/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=315&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2010/03/04/thirty-inches-a-year/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
		<item>
		<title>Bootstrapping Compilers and T-diagrams</title>
		<link>http://eschew.wordpress.com/2010/02/28/bootstrapping-compilers-and-t-diagrams/</link>
		<comments>http://eschew.wordpress.com/2010/02/28/bootstrapping-compilers-and-t-diagrams/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 21:07:41 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://eschew.wordpress.com/?p=304</guid>
		<description><![CDATA[I came across a very nice notation in the book Basics of Compiler Design that greatly clarified the various choices for bootstrapping a compiler. The notation was originally created by Harvey Bratman in 1961 (!) , but every other reference &#8230; <a href="http://eschew.wordpress.com/2010/02/28/bootstrapping-compilers-and-t-diagrams/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=304&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I came across a very nice notation in the book <a href="http://www.diku.dk/hjemmesider/ansatte/torbenm/Basics/">Basics of Compiler Design</a> that greatly clarified the various choices for bootstrapping a compiler. The notation was originally created by <a href="http://portal.acm.org/citation.cfm?id=366249">Harvey Bratman in 1961 (!)</a> , but <a href="http://en.wikipedia.org/wiki/Tombstone_diagram">every</a> <a href="http://bnf-for-java.sourceforge.net/uml/static/ClassDiagram.html">other</a> reference I&#8217;ve found on the subject is just terrible for conveying understanding. Mogensen&#8217;s presentation, on the other hand, is refreshingly clear.</p>
<p>The rules for T-diagrams are very simple. A compiler written in some language &#8220;C&#8221; (could be anything from machine code on up) that translates programs in language A to language B looks like this (these diagrams are from <a href="http://www.diku.dk/hjemmesider/ansatte/torbenm/Basics/">Torben Mogensen&#8217;s freely-available book on compilers</a>):</p>
<p><a href="http://eschew.files.wordpress.com/2010/02/t-abc.png"><img src="http://eschew.files.wordpress.com/2010/02/t-abc.png?w=500" alt="" title="Simple compiler T-diagram"   class="aligncenter size-full wp-image-305" /></a></p>
<p>Now suppose you have a machine that can directly run HP machine code, and a compiler from ML to HP machine code, and you want to get a ML compiler running on different machine code P. You can start by writing an ML-to-P compiler in ML, and compile that to get an ML-to-P compiler in HP:</p>
<p><a href="http://eschew.files.wordpress.com/2010/02/t-mlp1.png"><img src="http://eschew.files.wordpress.com/2010/02/t-mlp1.png?w=500" alt="" title="Cross-compiling ML compiler"   class="aligncenter size-full wp-image-306" /></a></p>
<p>From there, feed the new ML-to-P compiler to itself, running on the HP machine, and you end up with an ML-to-P compiler that runs on a P machine!</p>
<p><a href="http://eschew.files.wordpress.com/2010/02/t-mlp2.png"><img src="http://eschew.files.wordpress.com/2010/02/t-mlp2.png?w=500" alt="" title="Full Half-Bootstrap Process"   class="aligncenter size-full wp-image-307" /></a></p>
<p>The T-diagram notation can also easily be extended with interpreters, which are simply vertical boxes that can be inserted between any two languages. For example, here&#8217;s a diagram depicting a machine D running an interpreter for language C that is, in turn, running a compiler in language C to translate a program from language A to language B:</p>
<p><a href="http://eschew.files.wordpress.com/2010/02/t-abcd.png"><img src="http://eschew.files.wordpress.com/2010/02/t-abcd.png?w=500" alt="" title="Compiler running in an Interpreter"   class="aligncenter size-full wp-image-312" /></a></p>
<p>After thinking about bootstrapping in an ad-hoc way, I just love the structure that these diagrams provide! Unfortunately, while the book itself is freely available online, there&#8217;s no HTML version of the book, only a PDF version. The easiest way to see the full presentation is probably to <a href="http://www.scribd.com/doc/47354/Basics-of-Compiler-Design">use Scribd</a> and search for &#8220;t-diagram&#8221;.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/304/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=304&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2010/02/28/bootstrapping-compilers-and-t-diagrams/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>

		<media:content url="http://eschew.files.wordpress.com/2010/02/t-abc.png" medium="image">
			<media:title type="html">Simple compiler T-diagram</media:title>
		</media:content>

		<media:content url="http://eschew.files.wordpress.com/2010/02/t-mlp1.png" medium="image">
			<media:title type="html">Cross-compiling ML compiler</media:title>
		</media:content>

		<media:content url="http://eschew.files.wordpress.com/2010/02/t-mlp2.png" medium="image">
			<media:title type="html">Full Half-Bootstrap Process</media:title>
		</media:content>

		<media:content url="http://eschew.files.wordpress.com/2010/02/t-abcd.png" medium="image">
			<media:title type="html">Compiler running in an Interpreter</media:title>
		</media:content>
	</item>
		<item>
		<title>A Snippet of Functional C</title>
		<link>http://eschew.wordpress.com/2010/02/10/a-snippet-of-functional-c/</link>
		<comments>http://eschew.wordpress.com/2010/02/10/a-snippet-of-functional-c/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 23:14:05 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://eschew.wordpress.com/2010/02/10/a-snippet-of-functional-c/</guid>
		<description><![CDATA[MurmurHash2 is a pretty nifty bit of code: excellent performance in both the statistical and chronological senses, and under the ultra-liberal MIT license. The kernel of the hash function comprises these 5 lines of C code. k is the next &#8230; <a href="http://eschew.wordpress.com/2010/02/10/a-snippet-of-functional-c/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=301&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://murmurhash.googlepages.com/">MurmurHash2</a> is a pretty nifty bit of code: excellent performance in both the statistical and chronological senses, and under the ultra-liberal MIT license.</p>
<p>The kernel of the hash function comprises these 5 lines of C code. <code>k</code> is the next four bytes to be hashed, <code>m</code> and <code>r</code> are experimentally-found constants, and <code>h</code> is the accumulated hash value:</p>
<pre><code>word mrmr_step(word k,
        word h, word m, word r) {
/*1*/ k *= m;
/*2*/ k ^= k &gt;&gt; r;
/*3*/ k *= m;
/*4*/ h *= m;
/*5*/ h ^= k;
      return h;
}</code></pre>
<p>Like much low-level systems code in C, this takes advantage of mutability: the value of <code>k</code> in line 3 is not the same as <code>k</code> in line 5. But what if you wanted to do this computation without mutability, or even assignment? Even in the land of C, <a href="http://research.sun.com/projects/plrg/Publications/ICFPAugust2009Steele.pdf">the rules, they are a-changin&#8217;</a> [pdf].</p>
<p>At first blush, it seems strange to do first-order functional programming in a language like C, which doesn&#8217;t provide much support for it. But it&#8217;s precisely because there&#8217;s so little magic to C that it&#8217;s such a good vehicle for seeing how things work under the covers. The real point of this post is not how to write functional code, as to explore how to compile functional code.</p>
<p>Anyways, back to the code. Mutability and immutability are sometimes interchangeable; for example, <code>a += 3; a *= 5; a -= 1;</code> does the same thing as <code>a = ((a + 3) * 5) - 1</code>. The key is the linear dependency chain: each mutated <code>a</code> value is used in precisely one place.</p>
<p>Examining the MurmurHash2 kernel above, most of the dependencies are linear. But there&#8217;s one branching dependency, from line 1 to line 2. There are two C-like ways of dealing with this. First, we could &quot;copy&quot; line 1 into line 2:<br />
  <br /><code>k = (k*m) ^ ((k*m) &gt;&gt; r);</code></p>
<p>The second way would be to introduce a new variable: </p>
<p><code>int km = k * m; km ^= km &gt;&gt; r;</code></p>
<p>But option 1 breaks down if line 1 has side-effects, and line 2 introduces a new assignment, which we wanted to avoid!</p>
<p>The trick to see is that functions provide variable bindings. Thus, we can translate the C code to functional pseudocode like so:</p>
<pre><code>/*1*/ bind km  to k * m in
/*2*/ bind kx  to km ^ (km &gt;&gt; r) in
/*3*/ bind kxm to kx * m in
/*4*/ bind hm  to h * m in
/*5*/ hm ^ kxm;
</code></pre>
<p>Now, in this static single assignment form, it&#8217;s super easy to see what can be safely inlined; they are bindings that are only used once, such as <code>hm</code> in line 4. So we might optimize this to:</p>
<pre><code>/*1*/ bind km to k * m in
/*2*/ bind kx to km ^ (km &gt;&gt; r) in
/*5*/ (h * m) ^ (kx * m);
</code></pre>
<p>I&#8217;ve left line 2 alone for clarity, but it&#8217;s easy to see that it could be trivially substituted into line 5. Now, how to translate back to C? In a language with anonymous functions and closures, it&#8217;s easy. Just like Scheme translates <code>let</code> into <code>lambda</code>, we could translate <code>bind varname to arg in expr</code> to JavaScript like <code>(function (varname) { return expr; })(arg)</code>. So let&#8217;s do that to start:</p>
<pre><code>(function          line2(km) {
  return (function line5(kx) {
/*5*/  return (h*m) ^ (kx*m);
/*2*/ })(km ^ (km &gt;&gt; r));
/*1*/ })(k * m);</code></pre>
<p>Note that the code now reads, in some sense, bottom-to-top. Notice also that we&#8217;ve created closures, because the line marked 5 references h, which is defined in a parent scope (not shown). So this code isn&#8217;t valid C, because C does not have first-class functions. Instead, all C functions must be declared at the top level. Luckily for us, translating the above code to C is easy. We move the function definitions to the top level, and add parameters for their free variables. (This process is called closure conversion, or sometimes lambda lifting.) We&#8217;re left with this purely functional C code:</p>
<pre><code>word line1(word km, word r) {
  return km ^ (km &gt;&gt; r);
}
word line5(word h, word kx, word m) {
  return (h * m) ^ (kx * m);
}
word mrmr_step_f(word k, word h,
                 word m, word r) {
  return line5(h, line2(k*m, r), m);
}</code></pre>
<p>This is the code that would be generated by a compiler, given input like the 3-line pseudocode from above. Now, the interesting bit is: how efficient is this version, compared to the original? Since this is just C, we can use <kbd>gcc</kbd>&#8216;s <kbd>-S</kbd> flag to compile both versions to optimized assembly and compare:</p>
<pre><code>
_Z11mrmr_step_fiiii:
.LFB970:
        imull   %edx, %edi
        movl    %edi, %eax
        sarl    %cl, %eax
        xorl    %edi, %eax
        imull   %edx, %eax
        imull   %esi, %edx
        xorl    %edx, %eax
        ret

_Z9mrmr_stepiiii:
.LFB971:
        imull   %edx, %edi
        imull   %edx, %esi
        movl    %edi, %eax
        sarl    %cl, %eax
        xorl    %edi, %eax
        imull   %edx, %eax
        xorl    %esi, %eax
        ret
</code></pre>
<p>Pretty cool! The assembly from the purely functional version is essentially identical to the low-level imperative code. And a modern out-of-order CPU will ensure that the dynamic execution is, in fact, identical for both versions.</p>
<h3>Update 2010/02/11</h3>
<p>There are two ways of handling the &#8220;extra&#8221; arguments added closure conversion. The way above, where free variables become parameters, is easy to do manually, and clearer for small numbers of parameters. The alternative is to create a separate structure holding the free variables, and pass a pointer to the structure. GCC is strong enough to compile this example to the same assembly as well. Not bad!</p>
<pre><code>struct mrmr_step2_env { word r; };
static inline word
step2(mrmr_step2_env* env, word km) {
  return km ^ (km &gt;&gt; env-&gt;r);
}

struct mrmr_step5_env { word h; word m; };
static inline word
step5(mrmr_step5_env* env, word kx) {
  return (env-&gt;h * env-&gt;m) ^ (kx * env-&gt;m);
}

word mrmr_step_f(word k, word h,
                 word m, word r) {
  mrmr_step2_env e2; e2.r = r;
  mrmr_step5_env e5; e5.h = h; e5.m = m;
  return step5(&amp;e5, step2(&amp;e2, k*m));
}</code></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/301/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/301/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/301/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/301/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/301/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/301/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/301/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=301&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2010/02/10/a-snippet-of-functional-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
		<item>
		<title>watch.py &#8211; run command when file changes</title>
		<link>http://eschew.wordpress.com/2009/09/27/watch-py-run-command-when-file-changes/</link>
		<comments>http://eschew.wordpress.com/2009/09/27/watch-py-run-command-when-file-changes/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 05:19:27 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://eschew.wordpress.com/2009/09/27/watch-py-run-command-when-file-changes/</guid>
		<description><![CDATA[I decided that Ian Piumarta’s tiny watch utility looked nifty, and that it would be nice to have a cross-platform, no-compile-required version. Granted, watch.c compiles using default make rules, so “no compile” is a bit arbitrary. Anyways, the result is &#8230; <a href="http://eschew.wordpress.com/2009/09/27/watch-py-run-command-when-file-changes/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=300&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I decided that <a href="http://piumarta.com/software/watch/">Ian Piumarta’s tiny <code>watch</code></a> utility looked nifty, and that it would be nice to have a cross-platform, no-compile-required version. Granted, <code>watch.c</code> compiles using default make rules, so “no compile” is a bit arbitrary.</p>
<p>Anyways, the result is <a href="http://svn.eschew.org/projects/misc/sw/bin/watch.py"><code>watch.py</code></a>.</p>
<p>Oddly enough, the two implementations have the exact same physical line counts!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/300/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=300&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2009/09/27/watch-py-run-command-when-file-changes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
		<item>
		<title>C++ was a victim of its own success</title>
		<link>http://eschew.wordpress.com/2009/09/26/c-was-a-victim-of-its-own-success/</link>
		<comments>http://eschew.wordpress.com/2009/09/26/c-was-a-victim-of-its-own-success/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 05:08:17 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://eschew.wordpress.com/2009/09/26/c-was-a-victim-of-its-own-success/</guid>
		<description><![CDATA[I came across an interesting paragraph when reading Bjarne Stroustrup’s 15-year retrospective, Evolving a language in and for the real world: C++ 1991-2006. This notion hadn’t occurred to me before, but it rings quite plausible. There was also a curious &#8230; <a href="http://eschew.wordpress.com/2009/09/26/c-was-a-victim-of-its-own-success/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=299&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I came across an interesting paragraph when reading Bjarne Stroustrup’s 15-year retrospective, <a href="http://www.research.att.com/~bs/hopl-almost-final.pdf">Evolving a language in and for the real world: C++ 1991-2006</a>. This notion hadn’t occurred to me before, but it rings quite plausible.</p>
<blockquote><p>There was also a curious problem with performance: C++ was too efficient for any really significant gains to come easily from research. This led many researchers to migrate to languages with glaring inefficiencies for them to eliminate. Elimination of virtual function calls is an example: You can gain much better improvements for just about any object-oriented language than for C++. The reason is that C++ virtual function calls are very fast and that colloquial C++ already uses non-virtual functions for time-critical operations. Another example is garbage collection. Here the problem was that colloquial C++ programs don’t generate much garbage and that the basic operations are fast. That makes the fixed overhead of a garbage collector looks far less impressive when expressed as a percentage of run time than it does for a language with less efficient basic operations and more garbage. Again, the net effect was to leave C++ poorer in terms of research and tools.</p>
<p>&#8211; Bjarne Stroustrup</p>
</blockquote>
<p>For a peek at an example of “glaring inefficiencies,” check out <a href="http://www.cs.virginia.edu/kim/publicity/pldi09tutorials/memory-efficient-java-tutorial.pdf">what two IBM researchers have found about memory use in Java</a>, and prepare to throw up in your mouth a little.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/299/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=299&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2009/09/26/c-was-a-victim-of-its-own-success/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
		<item>
		<title>Building protobuf with MinGW GCC 4.4.0</title>
		<link>http://eschew.wordpress.com/2009/09/20/building-protobuf-with-mingw-gcc-4-4-0/</link>
		<comments>http://eschew.wordpress.com/2009/09/20/building-protobuf-with-mingw-gcc-4-4-0/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 16:10:42 +0000</pubDate>
		<dc:creator>eschew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://eschew.wordpress.com/?p=294</guid>
		<description><![CDATA[So, after tearing my hair out for an hour this morning, I finally managed to build protobuf using MinGW and GCC 4.4.0, using the msys install from mozilla-build 1.4. The two major sticking points are mozilla-build includes autoconf 2.59, whereas &#8230; <a href="http://eschew.wordpress.com/2009/09/20/building-protobuf-with-mingw-gcc-4-4-0/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=294&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So, after tearing my hair out for an hour this morning, I finally managed to build <a href="http://code.google.com/p/protobuf/">protobuf </a>using MinGW and GCC 4.4.0, using the msys install from <a href="https://developer.mozilla.org/en/Windows_Build_Prerequisites#section_5">mozilla-build 1.4</a>.</p>
<p>The two major sticking points are</p>
<ol>
<li>mozilla-build includes autoconf 2.59, whereas protobuf requires autoconf 2.61 at minimum. Solution: download the msys autoconf 2.63 package, and install to <code>/usr/local/bin/autoconf-2.63/</code>, and temporarily export a prefixed <code>$PATH</code> for building protobuf.</li>
<li>protobuf attempts to link against <code>/c/mozilla-build/msys/mingw/lib/gcc/mingw32/4.4.0/libstdc++.dll.a</code>, which fails because that file doesn&#8217;t exist. Solution: edit the file <kbd>libstdc++.la</kbd> in that directory, replacing <kbd>libstdc++.dll.a</kbd> with <kbd>libstdc++.a</kbd> in the definition for <code>library_names</code></li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/eschew.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/eschew.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/eschew.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/eschew.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/eschew.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/eschew.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/eschew.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/eschew.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/eschew.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/eschew.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/eschew.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/eschew.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/eschew.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/eschew.wordpress.com/294/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=eschew.wordpress.com&amp;blog=53385&amp;post=294&amp;subd=eschew&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://eschew.wordpress.com/2009/09/20/building-protobuf-with-mingw-gcc-4-4-0/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/abd4cf5353b8210ab01faf6ffa4eb5fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">eschew</media:title>
		</media:content>
	</item>
	</channel>
</rss>
