<?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"
	>
<channel>
	<title>Comments on: The Erlang Challenge</title>
	<atom:link href="http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/feed/" rel="self" type="application/rss+xml" />
	<link>http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/</link>
	<description>Adventures in Open Source Erlang</description>
	<pubDate>Fri, 16 May 2008 11:00:59 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: The (Unofficial) Erlang Blog &#187; Blog Archive &#187; Erlang Challenge Announced</title>
		<link>http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-100951</link>
		<dc:creator>The (Unofficial) Erlang Blog &#187; Blog Archive &#187; Erlang Challenge Announced</dc:creator>
		<pubDate>Sun, 17 Feb 2008 22:59:12 +0000</pubDate>
		<guid isPermaLink="false">http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-100951</guid>
		<description>[...] last week&#8217;s Arc release and subsequent Arc challenge, Yariv Sadan (ErlyWeb) has announced the Erlang Challenge. The goal is to design &#38; program an advanced &#8220;parallel map&#8221; function that can [...]</description>
		<content:encoded><![CDATA[<p>[...] last week&#8217;s Arc release and subsequent Arc challenge, Yariv Sadan (ErlyWeb) has announced the Erlang Challenge. The goal is to design &amp; program an advanced &#8220;parallel map&#8221; function that can [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Martial</title>
		<link>http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-98011</link>
		<dc:creator>Martial</dc:creator>
		<pubDate>Mon, 11 Feb 2008 10:19:48 +0000</pubDate>
		<guid isPermaLink="false">http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-98011</guid>
		<description>I do like Erlang programming but the Smalltalk continuation-based solution with Seaside looks like the simpler way:
http://www.lukas-renggli.ch/blog/take-the-arc-challenge
Erlang has the advantage of low memory consumption and 'infinite' scalability.</description>
		<content:encoded><![CDATA[<p>I do like Erlang programming but the Smalltalk continuation-based solution with Seaside looks like the simpler way:<br />
<a href="http://www.lukas-renggli.ch/blog/take-the-arc-challenge" rel="nofollow">http://www.lukas-renggli.ch/blog/take-the-arc-challenge</a><br />
Erlang has the advantage of low memory consumption and &#8216;infinite&#8217; scalability.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yariv&#8217;s Blog &#187; Blog Archive &#187; More Erlang Fun: Distributed, Fault Tolerant MapReduce</title>
		<link>http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-97847</link>
		<dc:creator>Yariv&#8217;s Blog &#187; Blog Archive &#187; More Erlang Fun: Distributed, Fault Tolerant MapReduce</dc:creator>
		<pubDate>Mon, 11 Feb 2008 02:13:05 +0000</pubDate>
		<guid isPermaLink="false">http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-97847</guid>
		<description>[...] the Erlang Challenge posting, I showed how to implement a simple distributed parallel map function. You can pass it a [...]</description>
		<content:encoded><![CDATA[<p>[...] the Erlang Challenge posting, I showed how to implement a simple distributed parallel map function. You can pass it a [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yariv</title>
		<link>http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-97344</link>
		<dc:creator>Yariv</dc:creator>
		<pubDate>Sat, 09 Feb 2008 23:42:29 +0000</pubDate>
		<guid isPermaLink="false">http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-97344</guid>
		<description>@Bob There is a slight difference between the use of SpawnFun in this example and calling pmap(Fun, List, [node() &#124; nodes()]) -- in this example, if the list of nodes is not empty, the current node won't be included in the call to spawn(). Obviously it's not a very important difference -- when I designed the example, I was just trying to illustrate how in Erlang, spawning processes on remote VM's is as simple as spawning them on the local VM.

@wingedsubmariner I know about plists. It's great.</description>
		<content:encoded><![CDATA[<p>@Bob There is a slight difference between the use of SpawnFun in this example and calling pmap(Fun, List, [node() | nodes()]) &#8212; in this example, if the list of nodes is not empty, the current node won&#8217;t be included in the call to spawn(). Obviously it&#8217;s not a very important difference &#8212; when I designed the example, I was just trying to illustrate how in Erlang, spawning processes on remote VM&#8217;s is as simple as spawning them on the local VM.</p>
<p>@wingedsubmariner I know about plists. It&#8217;s great.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: wingedsubmariner</title>
		<link>http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-96890</link>
		<dc:creator>wingedsubmariner</dc:creator>
		<pubDate>Fri, 08 Feb 2008 23:31:39 +0000</pubDate>
		<guid isPermaLink="false">http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-96890</guid>
		<description>I wrote a library to do this a while ago:

http://code.google.com/p/plists/

It will also parallelize many other operations. It supports proper error handling as well, trying to make itself as invisible as possible, while still not sending large lists across processes except when necessary (separate heaps == potential inefficiency). It's capable of autodetecting the number of of threads Erlang is configured to use on each node and to spawn that many processes -- effectively maxing out a machine.

It's over one thousand lines of code though, so it fails succinctness.</description>
		<content:encoded><![CDATA[<p>I wrote a library to do this a while ago:</p>
<p><a href="http://code.google.com/p/plists/" rel="nofollow">http://code.google.com/p/plists/</a></p>
<p>It will also parallelize many other operations. It supports proper error handling as well, trying to make itself as invisible as possible, while still not sending large lists across processes except when necessary (separate heaps == potential inefficiency). It&#8217;s capable of autodetecting the number of of threads Erlang is configured to use on each node and to spawn that many processes &#8212; effectively maxing out a machine.</p>
<p>It&#8217;s over one thousand lines of code though, so it fails succinctness.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Xichekolas</title>
		<link>http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-96876</link>
		<dc:creator>Xichekolas</dc:creator>
		<pubDate>Fri, 08 Feb 2008 22:55:50 +0000</pubDate>
		<guid isPermaLink="false">http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-96876</guid>
		<description>@sjs: Ahhh, yeah. That makes total sense.</description>
		<content:encoded><![CDATA[<p>@sjs: Ahhh, yeah. That makes total sense.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bob Ippolito</title>
		<link>http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-96839</link>
		<dc:creator>Bob Ippolito</dc:creator>
		<pubDate>Fri, 08 Feb 2008 21:57:04 +0000</pubDate>
		<guid isPermaLink="false">http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-96839</guid>
		<description>It seems most people are missing the fact that this will distribute the work over all nodes (usually nodes are run on different machines). The data parallel languages cited in the comments will do a great job of this too, almost certainly better than Erlang, but I believe that most of them will only do computation on the local machine.

The equivalent single-node pmap is for Erlang is short too, but less interesting (remove all but the last 3 statements, change SpawnFun to spawn, and remove Nodes from the argument list).

There isn't really a different method for process creation on the local node versus any other node. It looks like SpawnFun is just handling a case that it really doesn't need to (bad input). spawn(node(), F) would work just fine (node() is the local node). spawn(F) is just shorter to write, but it's not necessary.

Realistically you'd probably call pmap(Fun, List, [node() &#124; nodes()]) which would distribute the computation over all nodes that the local node can see, including itself node. He could've just as well checked for an empty Nodes and used [node()] instead.

As far as mailbox size goes, it depends on what you mean by "properly". The answer is probably not -- this isn't an optimal pmap for very large lists due to that issue.</description>
		<content:encoded><![CDATA[<p>It seems most people are missing the fact that this will distribute the work over all nodes (usually nodes are run on different machines). The data parallel languages cited in the comments will do a great job of this too, almost certainly better than Erlang, but I believe that most of them will only do computation on the local machine.</p>
<p>The equivalent single-node pmap is for Erlang is short too, but less interesting (remove all but the last 3 statements, change SpawnFun to spawn, and remove Nodes from the argument list).</p>
<p>There isn&#8217;t really a different method for process creation on the local node versus any other node. It looks like SpawnFun is just handling a case that it really doesn&#8217;t need to (bad input). spawn(node(), F) would work just fine (node() is the local node). spawn(F) is just shorter to write, but it&#8217;s not necessary.</p>
<p>Realistically you&#8217;d probably call pmap(Fun, List, [node() | nodes()]) which would distribute the computation over all nodes that the local node can see, including itself node. He could&#8217;ve just as well checked for an empty Nodes and used [node()] instead.</p>
<p>As far as mailbox size goes, it depends on what you mean by &#8220;properly&#8221;. The answer is probably not &#8212; this isn&#8217;t an optimal pmap for very large lists due to that issue.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: horia314</title>
		<link>http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-96815</link>
		<dc:creator>horia314</dc:creator>
		<pubDate>Fri, 08 Feb 2008 20:25:59 +0000</pubDate>
		<guid isPermaLink="false">http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-96815</guid>
		<description>Touche, one might say. On the other hand, just like Arc is trying to prove it's the best Arc around, so is this post proving that Erlang is the best Erlang around.

Except for it, there isn't any production ready programming language that can do the sort of massive parallelism that Erlang can provide.

Kudos to it for being able to do that, but monopolies are bad things in programming languages as they are in business.

One thing in special bothers me about Erlang : why is there a different method for node creation on the local machine than it is on another node? I mean, it's clearly something the runtime can handle, and it'll spare you some fair amount of work on the programming side.</description>
		<content:encoded><![CDATA[<p>Touche, one might say. On the other hand, just like Arc is trying to prove it&#8217;s the best Arc around, so is this post proving that Erlang is the best Erlang around.</p>
<p>Except for it, there isn&#8217;t any production ready programming language that can do the sort of massive parallelism that Erlang can provide.</p>
<p>Kudos to it for being able to do that, but monopolies are bad things in programming languages as they are in business.</p>
<p>One thing in special bothers me about Erlang : why is there a different method for node creation on the local machine than it is on another node? I mean, it&#8217;s clearly something the runtime can handle, and it&#8217;ll spare you some fair amount of work on the programming side.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Mathers</title>
		<link>http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-96813</link>
		<dc:creator>David Mathers</dc:creator>
		<pubDate>Fri, 08 Feb 2008 20:11:58 +0000</pubDate>
		<guid isPermaLink="false">http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-96813</guid>
		<description>update T1 set L2 = F2(L1)

The clustering and scaling is handled by the SQL implementation, not mixed in with the application logic.</description>
		<content:encoded><![CDATA[<p>update T1 set L2 = F2(L1)</p>
<p>The clustering and scaling is handled by the SQL implementation, not mixed in with the application logic.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Garrett</title>
		<link>http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-96809</link>
		<dc:creator>Garrett</dc:creator>
		<pubDate>Fri, 08 Feb 2008 19:55:02 +0000</pubDate>
		<guid isPermaLink="false">http://yarivsblog.com/articles/2008/02/08/the-erlang-challenge/#comment-96809</guid>
		<description>pmap f [] = []
pmap f (x:xs) = y `par` (ys `pseq` (y : ys))
    where y = f x
          ys = pmap f xs</description>
		<content:encoded><![CDATA[<p>pmap f [] = []<br />
pmap f (x:xs) = y `par` (ys `pseq` (y : ys))<br />
    where y = f x<br />
          ys = pmap f xs</p>
]]></content:encoded>
	</item>
</channel>
</rss>
