apple blocks extension

Chris Lattner clattner@apple.com
Thu Sep 24 15:23:00 GMT 2009


On Sep 24, 2009, at 7:57 AM, Jason Merrill wrote:

> On 09/15/2009 12:35 PM, Chris Lattner wrote:
>> The second major feature of Blocks vs c++ lambdas is that they can be
>> "copied onto the heap". This allows things like "Grand Central  
>> Dispatch"
>> to work: you can write code that executes blocks asynchronously or on
>> other threads/work queues (after the function containing the block  
>> has
>> returned). A simple example is:
>>
>> void print_on_different_thread(int X) {
>>  run_asynch(^{
>>    printf("Hi %d\n", X);
>>  });
>> }
>>
>> With lambdas, the closure would be go out of scope when
>> print_on_different_thread returns, but blocks allows "run_asynch" to
>> extend the lifetime of the block.
>
> The lambda equivalent would be
>
> void print_on_different_thread(int X) {
>  run_asynch([=]{
>    printf("Hi %d\n", X);
>  });
> }
>
> since X is captured by copy, run_asynch can do whatever it wants  
> with the closure and not worry about the original X going away.
>
> The only difference between blocks and lambdas here seems to be  
> where you decide to copy the locals off the stack.

Can the lambda (containing X) be copied and put onto a queue?  What is  
its type?

-Chris



More information about the Gcc mailing list