Clang'阻止'如何工作?

时间:2010-03-07 03:21:53

标签: c++ objective-c clang objective-c-blocks clang-extensions

http://clang.llvm.org/docs/BlockLanguageSpec.txt

看起来很酷。

然而,

  1. 我不明白。
  2. 我没有看到它的例子。
  3. 我没有看到在C ++中难以表达的想法的例子,但在块中表达是微不足道的。
  4. 有谁可以启发我这个?

5 个答案:

答案 0 :(得分:14)

块本质上是一种将代码和范围作为数据传递的方法。它们在其他一些语言中被称为闭包和匿名函数。

这是article,其中包含更多详细信息和代码示例。

答案 1 :(得分:10)

NanoTech已经与块的解释相关联。至于这与C ++的关系,请允许我说出我的个人意见:这个扩展名 在C ++中很有用。原因如下:

关于块引用类型:我们已经具有“多态函数”,它可以带有一些状态,请参阅boost::functiontr1::function。 C ++将在其下一个标准库中包含一个抛光版本。 “C Blocks”的优势在于您不需要处理Block_copyBlock_release之类的问题。这些多态函数对象足够聪明,可以自己管理内存。

关于块文字语法:这是一个很好的语法,允许您将代码放在“所属”的位置,而无需太多的样板代码。但这同样适用于其C ++计数器部分:C++0x lambdas。但是C ++ 0x lambda特性还允许您在紧密的内部循环中使用lambda对象,而不会因为可能的内联而导致函数调用的高性能成本。

由于C ++ 0x lambdas也可用于性能有问题且std :: function更易于处理w.r.t.内存管理向C ++添加“C块”似乎是多余的。 “C blocks”似乎更适合不支持模板或析构函数的语言。

答案 2 :(得分:5)

答案 3 :(得分:2)

它们基本上只是Apple的closures /匿名函数的术语。正如Nikolai所说,他们就是如何使用Grand Central Dispatch并行运行多个功能(因此使用超过1个核心),而不必担心线程和锁定。

答案 4 :(得分:0)

据我所知,此扩展适用于Apple的Grand Central Dispatch框架。块是可以并行运行的小型可调度/可排队实体。