问题
http://clang.llvm.org/docs/BlockLanguageSpec.txt
Looks really cool.
However,
- I don't understand it.
- I don't see examples it.
- I don't see examples of ideas hard to express in C++ as is, but trivial to express in blocks.
Can anyone enlighten me on this?
回答1:
Blocks are, essentially, a way to pass code and scope around as data. They're known in some other languages as closures and anonymous functions.
Here's an article with more details and code examples.
回答2:
NanoTech already linked to an explanation of blocks. As for how this relates to C++ let me state my personal opinion: This extension is not useful in C++. Here's why:
Regarding the block reference type: We already have "polymorphic functions" which can carry some state around, see boost::function, tr1::function. C++ will include a polished version of this in its next standard library. The advantage over "C Blocks" is that you don't need to mess with things like Block_copy
and Block_release
. These polymorphic functions objects are smart enough to do their own memory managing.
Regarding the block literal syntax: It's a nice syntax that allows you to put the code where it "belongs" without the need for much boilerplate code. But the same applies to its C++ counter part: C++0x lambdas. But C++0x lambda feature also allows you to use lambda objects in tight inner loops without high performance costs of function calls due to possible inlining.
Since C++0x lambdas can be also used in situations where performance is an issue and std::function is easier to handle w.r.t. memory management the addition of "C Blocks" to C++ seems redundant. "C blocks" seem to be more tailored to languages that don't support templates or destructors.
回答3:
For more on blocks and how they work, you can refer to the following:
- Introducing Blocks and Grand Central Dispatch
- Blocks Programming Topics
- Cocoa for Scientists (Part XXVII): Getting Closure with Objective-C
- Cocoa for Scientists (XXXI): All Aboard Grand Central
- Concurrency Programming Guide: Implementing Tasks Using Blocks
- Cocoa Core Competencies: Block Object
回答4:
They're basically just Apple's term for closures/anonymous functions. As Nikolai notes, they're how you use Grand Central Dispatch to run multiple functions in parallel (thus using more than 1 core) without having to worry about threading and locking.
回答5:
As far as I understand this extension is for Apple's Grand Central Dispatch framework. Blocks are tiny schedulable/queue-able entities to be potentially run in parallel.
来源:https://stackoverflow.com/questions/2395040/how-do-clang-blocks-work