<?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: Joel Spolsky: You cannot program parallel in C, period</title>
	<atom:link href="http://jakob.engbloms.se/archives/953/feed" rel="self" type="application/rss+xml" />
	<link>http://jakob.engbloms.se/archives/953?&amp;owa_from=feed&amp;owa_sid=</link>
	<description>Computer Technology: Simulation, Virtualization, Virtual Platforms, Embedded, Multicore and Multiprocessing (by Jakob Engblom)</description>
	<lastBuildDate>Tue, 09 Mar 2010 16:40:29 -0800</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Andras</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2557</link>
		<dc:creator>Andras</dc:creator>
		<pubDate>Thu, 15 Oct 2009 00:49:47 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2557</guid>
		<description>Well, consider Cilk. Simple elegant and even an average programmer (and Joel ;-)) can understand. 
At Ericsson, we write parallel and concurrect programs in C all the time. While it&#039;s not the simplest thing to do, it&#039;s done by average programmers and the very reason you are able to make a mobile phone call is that it works :-)</description>
		<content:encoded><![CDATA[<p>Well, consider Cilk. Simple elegant and even an average programmer (and Joel <img src='http://jakob.engbloms.se/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ) can understand.<br />
At Ericsson, we write parallel and concurrect programs in C all the time. While it&#8217;s not the simplest thing to do, it&#8217;s done by average programmers and the very reason you are able to make a mobile phone call is that it works <img src='http://jakob.engbloms.se/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lars</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2553</link>
		<dc:creator>Lars</dc:creator>
		<pubDate>Tue, 13 Oct 2009 09:44:30 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2553</guid>
		<description>Hey, maybe Joel is not to stupid for this:

http://macresearch.org/cocoa-scientists-xxxi-all-aboard-grand-central
http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/12</description>
		<content:encoded><![CDATA[<p>Hey, maybe Joel is not to stupid for this:</p>
<p><a href="http://macresearch.org/cocoa-scientists-xxxi-all-aboard-grand-central" rel="nofollow">http://macresearch.org/cocoa-scientists-xxxi-all-aboard-grand-central</a><br />
<a href="http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/12" rel="nofollow">http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/12</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charlie Martin</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2551</link>
		<dc:creator>Charlie Martin</dc:creator>
		<pubDate>Mon, 12 Oct 2009 17:34:48 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2551</guid>
		<description>Oh, come on, Joel, that&#039;s just dumb.  Or, at least, it&#039;s reducible to &quot;parallel programming cannot be done at all&quot;, because if it were possible to parallel program at all, it would then be possible to reduce the components in the magical Parallel Programming Language to C fragments (proof via Turing equivalence.)

Of course, what you really mean is &quot;conventional programmers, trained in a conventional manner with no special training in dealing with concurrency, find it extremely difficult to write parallel programs that are correct.&quot;

To which the knowledgeable response is &quot;well, duh.&quot;</description>
		<content:encoded><![CDATA[<p>Oh, come on, Joel, that&#8217;s just dumb.  Or, at least, it&#8217;s reducible to &#8220;parallel programming cannot be done at all&#8221;, because if it were possible to parallel program at all, it would then be possible to reduce the components in the magical Parallel Programming Language to C fragments (proof via Turing equivalence.)</p>
<p>Of course, what you really mean is &#8220;conventional programmers, trained in a conventional manner with no special training in dealing with concurrency, find it extremely difficult to write parallel programs that are correct.&#8221;</p>
<p>To which the knowledgeable response is &#8220;well, duh.&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tim Berglund</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2550</link>
		<dc:creator>Tim Berglund</dc:creator>
		<pubDate>Mon, 12 Oct 2009 17:34:44 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2550</guid>
		<description>Joel is, per his usual enjoyable style, making an overly generalized, contrarian statement in support of a valid point: C is the wrong choice for almost all concurrent programming. No one writing concurrent code at the application level on a general-purpose server is going to sit down with a diverse toolset and a blank sheet of paper and pick C as his language. They just aren&#039;t.

That said, his statement is, on its face, false. I know this because I *do not* think of myself &quot;hot shit&quot;—I&#039;ve taken far too many blows on my developer&#039;s back for that!—and I have, in fact, written complex concurrent code in C. It&#039;s some of the most difficult code I&#039;ve ever written, but it can be done. Firmware developers do it all the time. Would it be cool if we could give them tools to work at a higher, safer level of abstraction while maintaining C&#039;s time and space advantages? Yeah! We can afford those trade-offs at the application level on the server, so C is always the wrong choice there. But that&#039;s not because the alternative is impossible; it&#039;s because the alternative is prohibitively expensive in development time and quality.

Another important point: I enjoy making fine distinctions and elaborating on them at length. Joel likes making bombastic, sweeping generalizations. Lots of people read Joel. Not quite as many read me. Something to think about as we consider this debate. :)</description>
		<content:encoded><![CDATA[<p>Joel is, per his usual enjoyable style, making an overly generalized, contrarian statement in support of a valid point: C is the wrong choice for almost all concurrent programming. No one writing concurrent code at the application level on a general-purpose server is going to sit down with a diverse toolset and a blank sheet of paper and pick C as his language. They just aren&#8217;t.</p>
<p>That said, his statement is, on its face, false. I know this because I *do not* think of myself &#8220;hot shit&#8221;—I&#8217;ve taken far too many blows on my developer&#8217;s back for that!—and I have, in fact, written complex concurrent code in C. It&#8217;s some of the most difficult code I&#8217;ve ever written, but it can be done. Firmware developers do it all the time. Would it be cool if we could give them tools to work at a higher, safer level of abstraction while maintaining C&#8217;s time and space advantages? Yeah! We can afford those trade-offs at the application level on the server, so C is always the wrong choice there. But that&#8217;s not because the alternative is impossible; it&#8217;s because the alternative is prohibitively expensive in development time and quality.</p>
<p>Another important point: I enjoy making fine distinctions and elaborating on them at length. Joel likes making bombastic, sweeping generalizations. Lots of people read Joel. Not quite as many read me. Something to think about as we consider this debate. <img src='http://jakob.engbloms.se/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: henk</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2549</link>
		<dc:creator>henk</dc:creator>
		<pubDate>Mon, 12 Oct 2009 17:23:08 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2549</guid>
		<description>It of course depends on the libraries and tools you use. Using the low-level C primitives, which are somewhat associated with native C (even though technically even those low-level primitives aren&#039;t a part of C itself), like Pthreads and fork/join, it is indeed barely possible for mere humans to code parallel.

Now some higher beings (like kernel coders) might put these to good use, but for the rest of us it&#039;s pretty much a no-go.

Now move up the concurrency ladder and take a look a higher level frameworks like map/reduce, GCD (grand central dispatch) and the kind of stuff that you find in e.g. Java&#039;s concurrent package. Armed with these tools, concurrent and parallel programming suddenly comes within the reach of use groups of mere mortals.</description>
		<content:encoded><![CDATA[<p>It of course depends on the libraries and tools you use. Using the low-level C primitives, which are somewhat associated with native C (even though technically even those low-level primitives aren&#8217;t a part of C itself), like Pthreads and fork/join, it is indeed barely possible for mere humans to code parallel.</p>
<p>Now some higher beings (like kernel coders) might put these to good use, but for the rest of us it&#8217;s pretty much a no-go.</p>
<p>Now move up the concurrency ladder and take a look a higher level frameworks like map/reduce, GCD (grand central dispatch) and the kind of stuff that you find in e.g. Java&#8217;s concurrent package. Armed with these tools, concurrent and parallel programming suddenly comes within the reach of use groups of mere mortals.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jakob</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2547</link>
		<dc:creator>Jakob</dc:creator>
		<pubDate>Mon, 12 Oct 2009 14:46:21 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2547</guid>
		<description>Looks like this post caught fire. 

I think that the truth, if there is such a thing, is not as bad as Joel is making it out to be: C in general is hard to use for parallel programming, but it does seem to be successfully applied in some critical code, by good programmers. 

But as a general programming language for general parallel software, I think there are many better choices than plain C with a low-level API. OpenMP does count to low-level in my book.  You want at least a gc, and preferably asynchronous message-passing or similar crash cushions to make it comfortable. 

One size does not fit all, but &quot;size C&quot; does fit some.</description>
		<content:encoded><![CDATA[<p>Looks like this post caught fire. </p>
<p>I think that the truth, if there is such a thing, is not as bad as Joel is making it out to be: C in general is hard to use for parallel programming, but it does seem to be successfully applied in some critical code, by good programmers. </p>
<p>But as a general programming language for general parallel software, I think there are many better choices than plain C with a low-level API. OpenMP does count to low-level in my book.  You want at least a gc, and preferably asynchronous message-passing or similar crash cushions to make it comfortable. </p>
<p>One size does not fit all, but &#8220;size C&#8221; does fit some.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: f055</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2546</link>
		<dc:creator>f055</dc:creator>
		<pubDate>Mon, 12 Oct 2009 13:14:18 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2546</guid>
		<description>Some programmers are not human, thus this does not comply. Also, concurrency is one of the last areas where your code can be 100% correct and still produce an error in 0.01% situations, and this obviously will appear during the most important moment of the user. Murphy is evil, I tell you.</description>
		<content:encoded><![CDATA[<p>Some programmers are not human, thus this does not comply. Also, concurrency is one of the last areas where your code can be 100% correct and still produce an error in 0.01% situations, and this obviously will appear during the most important moment of the user. Murphy is evil, I tell you.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chauncy</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2545</link>
		<dc:creator>Chauncy</dc:creator>
		<pubDate>Mon, 12 Oct 2009 11:30:46 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2545</guid>
		<description>Aren&#039;t the UNIX-like kernels (E.g., Linux, BSD) written in C, aren&#039;t they multi-threaded, and aren&#039;t they very reliable?</description>
		<content:encoded><![CDATA[<p>Aren&#8217;t the UNIX-like kernels (E.g., Linux, BSD) written in C, aren&#8217;t they multi-threaded, and aren&#8217;t they very reliable?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul Betts</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2543</link>
		<dc:creator>Paul Betts</dc:creator>
		<pubDate>Mon, 12 Oct 2009 02:59:57 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2543</guid>
		<description>Every modern production operating system kernel is written in C, and an OS kernel is the most concurrent environment you could ever program in.</description>
		<content:encoded><![CDATA[<p>Every modern production operating system kernel is written in C, and an OS kernel is the most concurrent environment you could ever program in.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Machielo</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2542</link>
		<dc:creator>Machielo</dc:creator>
		<pubDate>Mon, 12 Oct 2009 00:43:13 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2542</guid>
		<description>MPI is parallel, and works with C flawlessly. Joel usually goes to the extreme to make his point, but this time he failed.</description>
		<content:encoded><![CDATA[<p>MPI is parallel, and works with C flawlessly. Joel usually goes to the extreme to make his point, but this time he failed.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: herp derp</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2541</link>
		<dc:creator>herp derp</dc:creator>
		<pubDate>Sun, 11 Oct 2009 21:54:30 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2541</guid>
		<description>i leave a coment on der paeg.</description>
		<content:encoded><![CDATA[<p>i leave a coment on der paeg.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Astro</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2540</link>
		<dc:creator>Astro</dc:creator>
		<pubDate>Sun, 11 Oct 2009 21:22:16 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2540</guid>
		<description>You&#039;re confusing parallel &amp; concurrent programming. While parallel programming is very easy with OpenMP and still easy with threads, concurrent programming is the nightmare you are talking about. Asynchronous programming to the rescue, it&#039;s still concurrent.</description>
		<content:encoded><![CDATA[<p>You&#8217;re confusing parallel &amp; concurrent programming. While parallel programming is very easy with OpenMP and still easy with threads, concurrent programming is the nightmare you are talking about. Asynchronous programming to the rescue, it&#8217;s still concurrent.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kevin Bowling</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2538</link>
		<dc:creator>Kevin Bowling</dc:creator>
		<pubDate>Sun, 11 Oct 2009 21:13:59 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2538</guid>
		<description>Joel,

You are an idiot.

OpenMP much?</description>
		<content:encoded><![CDATA[<p>Joel,</p>
<p>You are an idiot.</p>
<p>OpenMP much?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Evan Carroll</title>
		<link>http://jakob.engbloms.se/archives/953/comment-page-1#comment-2537</link>
		<dc:creator>Evan Carroll</dc:creator>
		<pubDate>Sun, 11 Oct 2009 20:48:16 +0000</pubDate>
		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953#comment-2537</guid>
		<description>Thanks for succinctly summing this up! People are too stupid to write multi-threaded code in C. This argument by fiat is the most sound, logical, and rational argument by fiat that I&#039;ve seen yet. I&#039;m delighted to finally understood these vivid points you hit on -- hopefully someone can do something really great with this constructive advice and revise the C language!!! Thanks Joel!!! U ROX.</description>
		<content:encoded><![CDATA[<p>Thanks for succinctly summing this up! People are too stupid to write multi-threaded code in C. This argument by fiat is the most sound, logical, and rational argument by fiat that I&#8217;ve seen yet. I&#8217;m delighted to finally understood these vivid points you hit on &#8212; hopefully someone can do something really great with this constructive advice and revise the C language!!! Thanks Joel!!! U ROX.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
