« C/C++ 与 Lua 的混合编程 | 返回首页 | 关于RSS阅读器的一些想法 »

神啊,C 终于开始支持 closure 了

不支持 closure 的语言用起来真是太难受了。

前段时间有同事在用 boost 的时候想用一个匿名的 struct 实现一个 functor 模拟出 closure 来用。可耻的失败鸟。迎接他的是一大坨的 template 编译错误。我这个久久不碰 C++ 的碰观者就有机会在一旁幸灾乐祸了。固然这是因为对 C++ 语言的犄角旮旯认识不足导致的,若是早几年,说不定我还拿这个作为招聘的高级笔试题呢。现在,我只会指责,语言怎么可以设计成这样。

给语言加新特性并不可怕。因为我们最终是要用语言解决问题的。

Apple 给 C/C++ 加的 Blocks 扩展就是这么一个好东西。

简单说,就是给 C 加了一个 closure 的支持。

这个东西不太可能用纯粹库的形式提供。(即使 boost 提供了多么神奇的方案来模拟,终归是有先天缺陷的)

clang 已经支持了 blocks , 并提供了相关 runtime 。gcc 貌似也将加入。

至于 vc 等等,我就不关心了,很多年不用闭源的编译器。

Comments

2002-2003年那会全国一阵c++狂热,c++/STL的书翻译出版了N本,现在证明大家是被煽动了

还是看好加入Lambda和Concept的C++0x。那时候对于C++复杂性过高的大部分理由即将不复存在。

语言终归是要进化的,C++的问题就在于进化的太慢,以至于一堆人钻语言牛角尖去实现那些本来该由语言进化来完成的功能。

呵呵,感觉动态语言挺不错,尝试了一下Ruby的cucumber做BDD,感觉很棒。不过,如果对系统的要求很严格的话,动态语言的风险貌似有点高。

我回答楼下, 谁用过谁知道:)

问下云风:

这特性在编程的大多数时候必须的吗?

我觉得不是。

活用函数指针是不是更优雅一些呢?

我个人觉得这样的风格的代码看着很头晕,我脑袋不是编译器,要自己匹配那么多的括号。

人类真的不 要再发明什么语言了,有C够了,即使有别的语言也就内部用得了

人类真的不 要再发明什么语言了,有C够了,即使有别的语言也就内部用得了

有些没学过,看到不是很懂。

有些没学过,看到不是很懂。

template 在 c++ 中确实有用, 合理使用确实能让代码看起来用起来舒服很多,
不过不用template 也永远不会在项目开发中成为瓶颈. 实际项目开发关注的问题重要的多.

对closure 的评价也应该是如此吧, 一个混合着 closure 和普通函数的语言可能会造成很多困惑,

为了调制这种天生难解决的冲突, 一个有效的方法是做深度的隔离,比如说联合 c和lua的开发.
再多余的概念就观望吧, 我知道closure的好处, 我也能够用, 但要让我在c中直接用closure,等到这个真正大行其道吧.

确实好消息! 以后C就更强大了

cool, 期待中

等VS2010看看,据说VC有很大进步

其实我真有点不理解, C里面支持类似template的东西么?如果支持,或许我也不想用c++了,现在不得以要和c++纠缠的唯一理由只剩好多东西非要template不可了,特别是写一些数学相关的东东时.各位大牛们有没有能推荐一个更适合写3d程序的语言呢, 找合适的语言我都找了一两年了,找不到,痛苦中.

http://libdispatch.macosforge.org/

可以看看这个。

想不出来什么地方一定需要closure才能做的。或者说,想不到什么地方用closure才能更快更简洁的表达。

云风你举个简单例子吧。我知道lua里也支持closure。

VC加了lambda进去,估计是有closure的lambda吧。。

xu挺帅的

现在只有一个。另一个两年前参与llvm的开发,早就不做了。还有一个是华裔,在苹果编译器组工作。

clang的开发者都现身了啊!
似乎有三个来自中国的开发者。

呵呵,云风也关注clang啊。我参与它的开发1年多了。可以在http://llvm.org/developers.cgi看到我的照片。

风风是一个了不起的程序员和很有魅力的生活者

我对vc的唯一依赖就只有它能够调试STL程序了.

人类真的不 要再发明什么语言了,有C够了,即使有别的语言也就内部用得了。

BS一下标题党,原来是扩展……

C++里面面向对象不就是Closure么

曾经尝试在FreeBSD7在装Clang/LLVM, 从SVN check代码N长时间后,开始build。文件夹逐渐膨胀到几百M,接近1G的时候,build error。失败了……后来这玩意就不碰了,还是直接等二进制版本吧

我也不懂c++语言的!!

FreeBSD 8 已经引入了CLang/LLVM,有时间试试

好消息啊

Post a comment

非这个主题相关的留言请到:留言本