<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Are pipe dreams made of promises?</title>
	<atom:link href="http://clj-me.cgrand.net/2009/11/18/are-pipe-dreams-made-of-promises/feed/" rel="self" type="application/rss+xml" />
	<link>http://clj-me.cgrand.net/2009/11/18/are-pipe-dreams-made-of-promises/</link>
	<description>When the pupil is ready to learn, a teacher will appear.</description>
	<lastBuildDate>Wed, 16 Jun 2010 20:31:51 +0200</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Clojure and me &#187; Pipe dreams aren&#8217;t necessarily made of promises</title>
		<link>http://clj-me.cgrand.net/2009/11/18/are-pipe-dreams-made-of-promises/comment-page-1/#comment-373</link>
		<dc:creator>Clojure and me &#187; Pipe dreams aren&#8217;t necessarily made of promises</dc:creator>
		<pubDate>Fri, 02 Apr 2010 12:31:39 +0000</pubDate>
		<guid isPermaLink="false">http://clj-me.cgrand.net/?p=242#comment-373</guid>
		<description>[...] of the spinning nature of atoms, it&#8217;s kind of a hack (a fun hack but still a hack) to build queues on it. Here is the same pipe function built on Java [...]</description>
		<content:encoded><![CDATA[<p>[...] of the spinning nature of atoms, it&#8217;s kind of a hack (a fun hack but still a hack) to build queues on it. Here is the same pipe function built on Java [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Greg</title>
		<link>http://clj-me.cgrand.net/2009/11/18/are-pipe-dreams-made-of-promises/comment-page-1/#comment-353</link>
		<dc:creator>Greg</dc:creator>
		<pubDate>Thu, 18 Mar 2010 18:38:53 +0000</pubDate>
		<guid isPermaLink="false">http://clj-me.cgrand.net/?p=242#comment-353</guid>
		<description>clojure.contrib.pipes? :)</description>
		<content:encoded><![CDATA[<p>clojure.contrib.pipes? :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rick Moynihan</title>
		<link>http://clj-me.cgrand.net/2009/11/18/are-pipe-dreams-made-of-promises/comment-page-1/#comment-331</link>
		<dc:creator>Rick Moynihan</dc:creator>
		<pubDate>Tue, 23 Feb 2010 12:06:12 +0000</pubDate>
		<guid isPermaLink="false">http://clj-me.cgrand.net/?p=242#comment-331</guid>
		<description>@dwerner

I could be wrong but I&#039;m pretty sure the call to second is required because when we enqueue we recursively shift along the unfulfilled promises with the call to (swap! promises next).

If we handed the reader the very first item of promises then the reader would block forever because the delivery of a new list (made of the enqueued values cons&#039;d with a lazy seq of the remaining promises) happens in the next cell.  

This does appear to mean that the very first promise is unfulfilled (and gc&#039;d because nothing references it), but it means we need less logic in our enqueueing.

I personally find this code to be incredibly elegant and concise...  (Though it did take a while to figure out how it worked)</description>
		<content:encoded><![CDATA[<p>@dwerner</p>
<p>I could be wrong but I&#8217;m pretty sure the call to second is required because when we enqueue we recursively shift along the unfulfilled promises with the call to (swap! promises next).</p>
<p>If we handed the reader the very first item of promises then the reader would block forever because the delivery of a new list (made of the enqueued values cons&#8217;d with a lazy seq of the remaining promises) happens in the next cell.  </p>
<p>This does appear to mean that the very first promise is unfulfilled (and gc&#8217;d because nothing references it), but it means we need less logic in our enqueueing.</p>
<p>I personally find this code to be incredibly elegant and concise&#8230;  (Though it did take a while to figure out how it worked)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: dwerner</title>
		<link>http://clj-me.cgrand.net/2009/11/18/are-pipe-dreams-made-of-promises/comment-page-1/#comment-212</link>
		<dc:creator>dwerner</dc:creator>
		<pubDate>Wed, 30 Dec 2009 18:04:38 +0000</pubDate>
		<guid isPermaLink="false">http://clj-me.cgrand.net/?p=242#comment-212</guid>
		<description>The function looks useful and the implementation very clever. However, I couldn&#039;t quite wrap my head around the fact why you use &quot;second&quot; and &quot;next&quot; so quite often. Is this to force evaluation to move down the seq one step?</description>
		<content:encoded><![CDATA[<p>The function looks useful and the implementation very clever. However, I couldn&#8217;t quite wrap my head around the fact why you use &#8220;second&#8221; and &#8220;next&#8221; so quite often. Is this to force evaluation to move down the seq one step?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: rkrastev</title>
		<link>http://clj-me.cgrand.net/2009/11/18/are-pipe-dreams-made-of-promises/comment-page-1/#comment-179</link>
		<dc:creator>rkrastev</dc:creator>
		<pubDate>Thu, 19 Nov 2009 08:41:11 +0000</pubDate>
		<guid isPermaLink="false">http://clj-me.cgrand.net/?p=242#comment-179</guid>
		<description>Where we can read more about new developments in Clojure like promise/deliver?</description>
		<content:encoded><![CDATA[<p>Where we can read more about new developments in Clojure like promise/deliver?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: cgrand</title>
		<link>http://clj-me.cgrand.net/2009/11/18/are-pipe-dreams-made-of-promises/comment-page-1/#comment-177</link>
		<dc:creator>cgrand</dc:creator>
		<pubDate>Thu, 19 Nov 2009 07:01:05 +0000</pubDate>
		<guid isPermaLink="false">http://clj-me.cgrand.net/?p=242#comment-177</guid>
		<description>@anonymous it creates a communication channel whose ends can then be handed to two different threads. The read end is a plain lazy seq.</description>
		<content:encoded><![CDATA[<p>@anonymous it creates a communication channel whose ends can then be handed to two different threads. The read end is a plain lazy seq.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: anonymous</title>
		<link>http://clj-me.cgrand.net/2009/11/18/are-pipe-dreams-made-of-promises/comment-page-1/#comment-176</link>
		<dc:creator>anonymous</dc:creator>
		<pubDate>Wed, 18 Nov 2009 23:24:02 +0000</pubDate>
		<guid isPermaLink="false">http://clj-me.cgrand.net/?p=242#comment-176</guid>
		<description>Looks cool but I&#039;m not sure what this is for.</description>
		<content:encoded><![CDATA[<p>Looks cool but I&#8217;m not sure what this is for.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
