[cfe-dev] "Blocks" in Clang (aka closures)

David Chisnall csdavec at swansea.ac.uk
Wed Sep 3 11:02:34 PDT 2008


Thanks Bill,


On 2 Sep 2008, at 17:01, Bill Bumgarner wrote:

> On Sep 2, 2008, at 8:27 AM, David Chisnall wrote:
>> 1) In Seaside (Smalltalk web-app framework) blocks are used as a way
>> of implementing continuation passing.  This requires support for re-
>> binding variables in the closure.  Smalltalk does this via the
>> BlockContext object.  Is there an equivalent of it here?
>
> I'm not familiar with Seaside, so generically...
>
> All local variables are const-copied into the block (if used, of  
> course -- if not, nothing happens) unless marked with __block.
>
> int x = 3;
> __block int y = 4;
>
> ^{
>    // effectively 'const int x;' here
>    x = 4; // error
>    y = 5; // works fine
> };
>
> Global variables work just like they do everywhere else.

I don't think I explained this one properly.  Say I have the block  
you defined here, and I store it somewhere.  Later, I want to reuse  
the block, but have Y point to a different __block-scope variable.   
This pattern is very important for a lot of the stuff that Seeside  
uses to turn a sequence of HTTP requests into something that looks  
like a normal GUI application to the programmer.  The general  
question here is are the blocks reflective, like Smalltalk blocks, or  
are the opaque like GCC nested functions?

David



More information about the cfe-dev mailing list