刘未鹏|C++的罗浮宫

Knowledge sharing is the best reuse

用户操作
[即时聊天] [发私信] [加为好友]
刘未鹏ID:pongba
1110818次访问,排名26,好友48人,关注者283人。
兴趣:人工智能、机器学习、认知科学、神经科学、心理学、行为经济学、数学、计算机科学。
pongba的文章
原创 108 篇
翻译 8 篇
转载 0 篇
评论 1939 篇
刘未鹏的公告
除非特别声明,本站采用Creative Commons License许可。转载请保留作者、出处。非商业。

FeedSkyFeedBurner
或者用 鲜果 GR 抓虾 订阅。

CSDN Blog暂不支持RSS全文输出,对此感到不便的朋友可以使用强大的greasemonkey脚本:GReader Preview Enhanced(链接),该脚本支持在GReader里面直接打开全文页面。

我经常出没于TopLanguage

《C++的罗浮宫》5年选集

——知识分享是最大的复用

下载地址:csdn资源频道|mediafire

讨论问题请到TopLanguage综合技术讨论组

TopLanguage

精彩言论@TopLanguage


pongba的共享阅读@Delicious


pongba@Twitter


pongba在读@豆瓣


gtalk/msn(邮件请发送到gmail邮箱)

pongba@gmail.com
pp_liu@msn.com

搜索(不要回车,点击Go)


pongba翻译的





这个Blog上都写了哪些东东

最近评论
AQINGLAU:楼上说的注解和补充,如果太多了会让人觉得是画蛇添足,对于必要的表达夹杂点英文词句未尝不可
tankin:很喜欢这篇文章,看了很久,一直想知道这种启迪思维的书到底有没有,今天知道了,是有的,而且很早就有了,不知道主人家还有什么好书可以推荐么?就是这种启迪思维的好书,小弟计算机系刚刚毕业,工作半年,发现工作完了,还是看书,看好书最爽啊
看牛人的blog也很爽,比如主人家的这个blog,平时我尽是看了,没什么言语,但如果有机会,也是滔滔敬佩之言辞
韩龙:回复:chechezhu

姓朱也很好,朱字拆开来看就是“牛人”
madongfly:回z8913257:

人工智能是一个非常大的领域,包含了很多方向和分支。
而大学里的人工智能课通常都是该领域的入门课程,我不知道你所说的“真正的人工智能”指的是什么?不过这些入门的知识竟然会干扰你的思考,还真让我费解……
madongfly:回z8913257:

人工智能是一个非常大的领域,包含了很多方向和分支。
而大学里的人工智能课通常都是该领域的入门课程,我不知道你所说的“真正的人工智能”指的是什么?不过这些入门的知识竟然会干扰你的思考,还真让我费解……
文章分类
收藏
相册
其它图片
文章中的图片
我的大头贴
C++
Andrei Alexandrescu
Andrew Lumsdaine
Bjarne Stroustrup
boost
C++ Standard Commitee
Doug Gregor
Hans J. Boehm
Jaakko Jarvi
Jeremy G. Siek
Matthew Wilson
newsgroups
boost.Developer
boost.User
comp.lang.c++.moderated
comp.std.c++
TopLanguage
Open Source
Ant
codeplex
Danga
Google AJAX Search API
Google Code Prettify
Google Web Toolkit
Hadoop
MS shared source initiative
notepad++
STLSoft
不认识的朋友们
Delphij
fatalerror99
flow with the life
Glacier
jimaxsoft
lifesinger@淘宝UED
Mr. 6
realazy
Robbin
SpiritEpic
TK
wuyizi
Yelz
丁丁虫
冰云
刘慈欣
卢昌海
吴欣安(atppp)
周爱民
和菜头
姬十三
守望轩
小花@BlogBus
林达华
浦宇平
白鸦
程化
阮一峰
霍炬
飞之鸿
高远
鲍盛
机器学习/数据挖掘/信息检索/自然语言处理/认知科学/人工智能
AAAI
Apex
arXiv
Charles Kemp
Christopher Bishop
Christopher Manning
Cognitive Daily
Dan Jurafsky
David MacKay
ECML PKDD
Geoffrey Hinton
Herbert Simon
ICML
IJCAI
Jeff Hawkins
Jiawei Han
JMLR
Josh Tenenbaum
Larry Wasserman
Lucene
Marvin Minsky
MIT AI Lab
MIT Computational Cognitive Science Group
Mitchell Marcus
ML
NetLab
NIPS
Peter Norvig
Stanford AI Lab
Stanford NLP Lab
Stephen Boyd
Tom Mitchell
Trends in Cognitive Science
Vladimir Vapnik
Weka
Zhihua Zhou
技术
Coding Horror
High Scalability
Reddit
Stack Overflow
Steve Yegge
代码发芽网
淘宝UED团队
淘宝数据仓库团队
玩聚网
移山之道
其它
Gigapedia
Scientific American
Scientific American Mind
科学松鼠会
科幻世界
认识的朋友们
alai
chenyufei
dd
DreamHead
Googol
Jawley
Joyfire
littlestone
lxwde
Matrix67
realfun
RiceBall
roofalison
soloist
Tinyfool
windstorm
YongSun
书剑
云风
余晟
元凯宁
冯大辉(Fenng)
刘新宇
刘江@图灵
史晓明
吴新雨
周星星
周筠@博文视点
孟岩
张志强|阅微堂
张振
徐宥|4G Spaces
方舟@博文视点
曾登高
李笑来|Pure Pleasure
杨军
杨文博
熊节
王信文
王康生
范怀宇
荣耀
莫华枫
蒋涛
袁泳(g9)|负暄琐话
许式伟
谢东升
谷文栋|Beyond Search
邹欣@MSRA
郑昀
阿朱
陈冀康@华章
陈怀兴
鲍志云
存档
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 C++0x简讯收藏

新一篇: 康托尔、哥德尔、图灵——永恒的金色对角线(rev#2) | 旧一篇: 关于C++0x内存模型和序列点的一些思考

关于C++0x核心进展的一组简讯

                                           刘未鹏 /

              C++的罗浮宫(http://blog.csdn.net/pongba)

 

Concepts无疑是C++0x的杀手级特性之一(或许称它“杀手级”还有一个原因:杀死新手:))。最近关于concepts的提案终于汇聚了Bjarne StroustrupDouglas Gregor领导的两派做法之长,已然有大局渐定的端倪。很多两派之间一直以来的分歧得到了漂亮的折衷;辅以concept_map这样漂亮而实用的特性,着实非常有说服力,而且,concept目前的实现居然隐含着一个潜在的decltype设施,前几天看到Douglasboost.devel上提到,吓了一跳,自己怎么没有想到呢?想想也自然,人家可是ConceptGCCGCC with Concepts support)的实现者这一,对于自己实现的东东,当然最熟悉了,呵呵。连David Abrahams看到这个trick时都说自己实在是dumbDouglas给出的例子是推导函数/仿函数的返回值类型的,目前boost库里面的result_type设施的实现仍然是侵入式的,远不够完美。而有了concept之后,只需两三行代码即可实现一个完美的非侵入式result_type设施。实际上,concept作为aspect traits可以推导出一个类的任何成员签名里蕴含的类型来,当然也包括使其成为仿函数的operator()的返回值类型了。此外,就我的思考,concept可能蕴含着decltype的一个比较完善的非侵入式实现,至少比现在boost库里面的BOOST_TYPEOF用起来容易,后者需要注册类型,总的来说,concept引入了比目前的模板类型推导系统粒度更细的类型推导能力。

此外,concept的定义语法也逐渐成型成熟。虽然像late checking这样的特性我还是比较怀疑(实在有点“补丁”的感觉,目前这个特性也是整个concept系统里面最不稳定的,关于late_check的应用粒度问题还在揣摩当中,不过我想很可能这个特性会被剔除掉,而取代以更一般性的东西,毕竟显得太“孤立”了。)但毕竟来说整个concept系统已经呈现出所谓的“优雅”的感觉了,正如数学里面的“美”往往意味着正确一样,语言设计里的“优雅”也是如此。希望C++0x的这个主要特性能够漂亮的完成。本来打算单独介绍一下concept迄今为止走过的历史足迹的,然而重于还是抽不出时间好好组织一下,所以干脆只介绍一下最新进展了,有兴趣的朋友可以去C++ Committee Website上搜以往的proposal

另一个我非常关心的template特性——variadic templates——最近也露出了十分可喜的迹象。Douglas终于在gcc上做出了第一份实现,并附带了一份新的提案和一个Introduction Paper,此外还用这个新特性重新实现了tuplebindfunction这三个已加入tr1的库,非常漂亮,光是代码量来说,tuple的我算了一下大概节省了2/3,此外还有大幅度提高的可读性和优雅性等等。这个新闻这阵子在新闻组上很是引起了一些兴奋~:) 跟以前的两份提案相比,新的提案暂时削减了几个小的特性,但主要的特性都已经实现了。这个快两年没有动静,然而十分优雅的语言特性总算迈出了一大步,说实话,前阵子看到C++议会语言进展列表里面把它排在“不活跃”一栏时真是有点担心呢,心想别又等到花都谢了菜都凉了。现在既然编译器实现已出,看来离成熟之期已然不远矣。热心如Alexandrescu者在comp.std.c++上对此也提出了不少建设性意见,看得出来不少人还是很看好这一特性的,尤其是boosters,光是它给模板库代码可读性带来的提高就是一大亮点,更何况还有代码量的大规模节省,一些十分诡异的(宏的、元编程的)技巧的废弃,等等,所有这些都会使得模板库代码朝向更优雅的方向发展。加上目前支持者甚众,估计进入0x是基本不会错的了。

 

并发内存模型是另一个杀手级特性,尽管是个默默无闻的杀手级特性。显然,这是所有新特性里面最难搞清楚的,因为多线程编程本来就是非常微妙的东西。Java前几年在这个上面花了相当多的工夫,呵呵,这次C++也就不打算重新发明轮子了,把现成的Java内存模型削减一些不附合C++国情的方面,“抄”过来即可:) 有兴趣的可以参考Java标准里面的内存模型部分,以及Boehm的主页上这方面的内容,Boehm是参加过Java内存模型的修订工作的,干起这方面来轻车熟路(http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/)。不过话说回来,刚才说过了这是个默默无闻的杀手级特性,说它杀手级是因为多线程从本质上无法完全以库的形式来实现,非得语言层面支持不可,而并发编程的时代已然到来,并发编程技术将会是极为重要的一项技术,一门现代的语言对此若没有健全的支持是无论如何不行的,所以这个特性对于C++的今后至关重要,其重要性甚至超过了concept/variadic template这些fancy的语法特性。而说它默默无闻则是因为它并不是需要程序员在日常编程中需要时时关心的东西,就像GC一样,它们都属于在背后默默无闻地提供支持和保障的特性。正如有了GC程序员就只需关心对象创建一样,有了并发内存模型的语言级支持,程序员就可以放心地将注意力放到真正的并发编程技术上面了。个人觉得C++在这个时候完善内存模型应该不算晚,甚至恰到好处,Herb Sutter说过并发编程的技术发展了这么多年到今天刚刚算是进入业界大规模应用的前夕,并发时代即将到来,而C++恰好将在未来三年内做好准备。对于像C++这样一门主要应用于大规模系统级应用/游戏/图形等开发中的语言,效率是非常重要的,而并发则是对效率的有力提升。

 

另外一个不得不说的“工业级”特性就是Module(模块),这也是一个对大规模C++应用能够带来显著好处的特性,相信熟悉的朋友都知道一个事实,现在C++应用尤其是大规模应用的系统编译构建速度越来越成问题,Intel内部的一个统计表明C++头文件中的代码量占整个项目代码量的比重从90年代的10%左右一直涨到现在的超过50%!而且还有上升趋势,因为以模板技术为基础的C++现代库将大量的代码放在头文件中,并且大量运用宏以及高级模板技术,使得编译构建时间大大增加。比如win32gui就是因为boost.signal带来的编译时间太巨而自己设计了一个轻量级的signal类(Qt用的也是自己的QSignal)。《Large Scale C++ Software Design》里面也说头文件的parse是项目构建里面很虚耗光阴的一个过程(并用多加一层“包含哨位”的笨重手法来缓解)。Module的出现,根据已有经验的预测,能够大幅度缓解这一问题。这也是其主要动因之一(Java是早就有了Module的)。此外Module还能带来另外一些好处(C++里面加入新特性就是这样,一般总要想尽办法挖掘新特性的潜在好处)。不过,像Module这样的工业级特性在新闻组上获得的喧哗反而远远不及一些漂亮的语法/类型系统层面的特性,希望不会在投票上落选吧:)

 

最后就是几个已经相当成熟的特性了,auto算是其一,实际上这么一个小巧实用,早该加入标准的东东从被提出那一天起就已经是铁板钉钉了。不过,跟auto算是孪生双胞胎的decltype倒是还在摇摆,我感觉decltype还没有定数主要还是它看上去太“难看”了,而且违反DRY原则,其提出的函数的新声明语法实在是有点别扭,倒是期望concept系统能够涵盖其能力,免得搞得太复杂。

当然,还有rvalue/move这个宠儿,rvalue/move也已经进入最终“订正“阶段了,所做的就是一些细微的调整,同样,这也是一个打一提出就等于是鱼上砧板的特性,用一句老美的话,It just feels right!(关于autorvalue/move,我以前的一篇做过一些介绍)

 

除此之外一些还比较有活力的特性有:InitializerBjarne领导,旨在统一初始化语法形式、以更好的支持C++的泛型系统。此外还提供更方便的初始化手段)、opaque typedef(比较有意思的特性,能够进一步强化C++的类型系统,减少某些因类型系统不够强健而带来的隐蔽错误的机会,Matthew在《Imperfect C++》中有一章就提到这个问题),跟opaque typedef