apple blocks extension
Jason Merrill
jason@redhat.com
Thu Sep 24 14:57:00 GMT 2009
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.
Jason
More information about the Gcc
mailing list