Has anyone actually looked at the spec or is this just armchair philosophy? 

I've actually looked at these, and used em a little bit.  They're not at all as bad as I once thought they could be, and the reason they're there is to work with a concurrency framework onto which blocks can be scheduled to run on various queues, to do concurrent programming.  

If you're running Snow Leopard, they're being used all over the place for thread management.

Here's my objective and actually informed review:

Can something go horribly wrong with these blocks if you don't use them properly?  You bet!  Imagine many concurrently running blocks playing with shared global pointers... Luckily the serial queues are able to prevent that exact thing from happening. :-)

Does it make the code easier to read?  So far my answer is no, not at all.

Does it succeed in the goal of making it possible to do lockless programming of concurrent applications?  Yes, there's several rather interesting examples showing the concurrent computation of all the cells in Conway's Life for example.  I'd say this beats the snot out of coding with pthreads.

However, if I want real concurrency programming, I would NEVER use C over Erlang or Haskell by choice (or Limbo if it's available).  

Blocks themselves are really not terribly useful, you need the libdispatch library to make the real value in them come out, which does all the queue management by talking to the subsystem of Snow Leopard called "Grand Central Dispatch".  

Dave

On Wed, Sep 2, 2009 at 4:40 AM, Eris Discordia <eris.discordia@gmail.com> wrote:
Perl people love closures. It's one of their common programming techniques. Closures in C? Way to screw its clarity and closeness to the real (or virtual) machine. And in the end closure or no closure doesn't change how the binary looks but allows programmers to pepper source with brain-teasers (now, what does _that_ evaluate to?). Not good at all.


--On Wednesday, September 02, 2009 10:04 +0200 Anant Narayanan <anant@kix.in> wrote:

Mac OS 10.6 introduced a new C compiler frontend (clang), which added
support for "blocks" in C [1]. Blocks basically add closures and
anonymous functions to C (and it's derivatives). Full details with
examples are in the linked article. I think the feature is quite elegant
and might be useful in cases where you want map/reduce like functionality
in C.

How much effort would it be to support a feature similar to blocks in 8c
(and family)? What are your thoughts on the idea in general?

--
Anant

[1] http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/10