注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天地不仁,以万物为Googol!

天行有常,不以物喜,不以己悲……

 
 
 

日志

 
 

蓦然回首:C++历史上的五组五魁首,第四组:永远最重要的五个人

2006-10-27 22:46:23|  分类: 翻译 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

原文地址:http://www.artima.com/cppsource/top_cpp_people.html

 

在我的第一篇文章里,我列举了在书籍、非书籍出版物和软件中,贡献最大的事物。在这个部分中,我将焦点转移到人的身上。

 

C++是一门技术,但在技术后面,是人,来发明,改进,推广和使用这个技术。这周,我将展现与C++有关的五个最重要的人。

 

列表中的人,对公众都有很大影响,这个源自两个原因:首先,这些“前排的人”(呃,很抱歉,但这些人确实都是男人(men),而且我也对此表示遗憾。

)对大部分人有直接影响,而且这些影响是可以看得到的。你影响的人越多,说明你越重要。仅此而已。

 

这篇文章中只列举公众人物的第二个原因是,就像我在这个系列的第一篇里提到的一样,我的观点很大程度上是个局外人的观点。可能有人或者曾经有人,在暗地里或曾经在暗地里,对C++产生了重大影响,但这些人并没有出现在我的视野里。也许,Stroustrup仅仅是一个站在台上幸运儿,代表了实现C++部分甚至全部工作的人。也许标准委员会的工作,实际是记录某个坚持不现身的独立团体的命令。如果真是这样,他们成功了:我不认识他们。他们也不会出现在列表中。

 

在我选择列表中的人时,我意识到(1)他必须曾经用C++工作过很长时间,并且(2)他现在仍在用C++工作。很多人曾经很重要,但是,最重要的人已经在那里,持续的为C++做贡献,甚至一直工作到现在。

 

因此,我的这个列表是C++史上的名人表,根据他们出版的与C++相关的事物的出版时间排序,这些事物至少要比新闻组的帖子更正式。(这个时间总是比他们开始为这门语言工作的时间晚,因为知道值得对其他人说的知识,这个需要一段时间的积累。)与我的其他文章一样,我把这组名字限制在五个:没有优先顺序,没有附带提到的。因为我现在要处理的是人,而不是没有生命的东西,因此这篇列表最难写。不过,规矩就是规矩,我不打算破坏它。

 

蓦然回首:C++历史上的五组五魁首,第四组:永远最重要的五个人 - Googol - 天地不仁,以万物为Googol!

- Bjarne Stroustrup,1985年至今。好吧,呃……他发明了这门语言,他写了第一个编译器,他为这门语言出版了很多书籍(细节可以去他的出版物网页查看),他曾经积极参与推广和标准化工作,并且直到今天,他仍在为此努力。(比如,可以看看他最近的SELLs的论文[pdf],以及他作为合作者的STAPL研究工程,SELL指语义增强库语言,STAPL是指标准模版可适配并行库,我的翻译都是word by word的,大家凑合看)Stroustrup在多年以前,就可以功成身退,带着发明家的称号颐养天年。不过,他最终还是选择了继续他的已经持续了30年的研究项目,这个项目最终的产物就是现在的C++(也是早期的“带类的C”)。虽然我在这个个系列的文章中,没有对任何项目的重要性进行排序,但是,很难想象,还有人能比这个语言的发明者,首个实现者,并且一直引导语言进入软件开发领域直到今天的人更重要。

 

蓦然回首:C++历史上的五组五魁首,第四组:永远最重要的五个人 - Googol - 天地不仁,以万物为Googol!

- Andrew Koenig,1988年至今。Andrew Koenig是唯一一个,估计也将永远是一个,如果没有出版过任何与C++有关的东西,却仍然应该在列表中的人。不管是什么原因,我认为他曾经的出版物,掩饰了他这个低调的权威人士。他(与Barbara Moo合作)写了两本与C++有关的书,一本与C有关的书(这本书实在没法算到C++头上,不过即便这样……)还有一系列的杂志专栏(他的主页列出了这些专栏的链接)。

 

即便这样,Koenig被我选入列表,是因为其他人经常会提起他,特别是与C++标准化有关的事情。比如,是他认识到STL的重要性,并且带领Alexander Stepanov,在STL的作用还没有显示出来时,及时将其加入了标准。

 

我不知道,我有多少次从标准委员会的人那里听说或者看到这样的话:“呃,我们是这样考虑的,不过Andrew指出……”或者“那确实是个问题,不过之后Andy建议……”而且事实上,就我所知道的,Koenig是唯一一个用他的名字来命名C++某个特性的人。当时,在标准化的时候,与命名空间相关的名称匹配规则,在某些时候会导致如下的代码无法编译:

 

std::cout << someObject;

 

Koenig建议修改一下匹配规则,这种修改后的匹配规则迅速地以“Koenig匹配”而闻名。(注1)在标准中,这个规则的官方名字是自变量依赖匹配(argument-dependent lookup)(有时也被玩家们称作“ADL”),但是标准中的章节(章节3.4.2,如果你想知道确切的地方)还附带描述了一下“[基于Koenig匹配]”。

 

蓦然回首:C++历史上的五组五魁首,第四组:永远最重要的五个人 - Googol - 天地不仁,以万物为Googol!

- Scott Meyers,1991年至今。正像你看到的,写出为什么你觉得你自己是重要的,这并不像你想象的那么可怕。我依旧尽我最大的努力保持客观。而且,确实有很多证据,证明我在C++世界中留下了不少的记号——也可能是伤疤。我已经写了3本或者6本关于C++的书(取决于你怎么算了,是像我妻子,不计算修订版,还是像我一样,计算修订版,你决定吧),并且这些书的发行量很大。我为C++及其应用写了超过50篇的专栏和文章,并且,数年来,我在讨论会或者社团聚会上,被介绍给广大的开发者。很多由我发布的指导,成为了关于“好的”C++编程智慧的一部分(注2),并且很多厂商的lint工具对这些指导提供支持,这些都可以看作对我作品的支持。

 

很显然,我并没有在C++标准化中扮演重要角色,甚至还误导过公众。至少,我知道有两项标准化提议,是因为“我们这里有个问题,因为甚至Scott Meyers都没有正确理解”而被进一步讨论的。(举个例子,查一下将智能指针加入TR1的提议,搜一下我的名字)。

 

蓦然回首:C++历史上的五组五魁首,第四组:永远最重要的五个人 - Googol - 天地不仁,以万物为Googol!

- Herb Sutter,1997年至今。Sutter进入C++界将近十年了,而他的表现,已经不仅仅能用“多产”来形容。他以三本自己的著作和一本合著做为开始。接着是超过200篇的他的或者他合著的专栏和文章(大部分是他独立完成的),而且,在你还在惊讶他是如何分配时间的时候,要意识到,他能同时自己主持或者合作维护三个专栏。(注3)我无法想象他为C++标准委员会写了多少提议或者文档,但是,我是否已经提到,他现在是委员会的主席?他同时也是正式的C++ Report的首席编辑,他也经常在讨论会之类的聚会里发言,而且,他是我所知的坚持推动C++发展的热情最高的人。目前,他正在旗帜鲜明的推动多线程发展,认为多线程很快就会对性能极为敏感的程序产生重要影响,而且,他也在以一种新的方法——可能是语言扩展或者库扩展?——让开发者可以更轻易的使用多线程编程。(注4)

 

蓦然回首:C++历史上的五组五魁首,第四组:永远最重要的五个人 - Googol - 天地不仁,以万物为Googol!

- Andrei Alexandrescu,1998年至今。由于他的那本《C++设计新思维》颠覆了我们对模版的看法,Alexandrescu这个名字就和模版紧紧的联系在一起了。在某些时候,他的名字和模版是等价的,但这种看法并不完全。他对C++的贡献决不仅仅在于找到了应用尖括号的新的办法(虽然,就我所知,他是第一个演示如何应用模版模版参数(template template parameters)的人,比如,模版的模版参数(parameters to templates)(这两个名词,大家凑合看吧……))。

 

即便除了他和Herb Sutter合作的那本书(C++编程规范,Addison-Wesley, 2005年出版),他也在短时间内发表了40余篇文章,涉及对象拷贝(object copying),强制约束布局(alignment constraint enforcement),多线程编程(multithreaded programming),异常安全(exception-safety)和搜索(searching),而且,他的眼光经常能看到“标准”方法中可以改进性能的地方。就我的看法,这几年能让人们持续关注其工作的,就只有Alexandrescu一个人。大部分作者和宣传者(包括我)都会周期性的回到自己的那块领地,等待新思想的出现,但是,Alexandrescu能够非常快速的发现新的领域,并且在那个领域里有所斩获。(注5)

 

我现在已经列出了我认为C++历史上的五个最重要的书籍、非书籍出版物、软件,和人。我注意到,从这个系列文章的一开始,就不能避免得带有主观因素。而在这个系列的最后一篇文章里,我打算写些不仅仅是主观,而是完完全全属于个人的想法。下周,我会指出我在C++领域感到的五个最灵机一动的时刻("Aha!" moments)——五个突然闪现的瞬间,使我能在语言的某个方面达到一个新的境界,或者是语言的工作原理,或者是语言的应用。

 

注:

1 简单的说,Koenig查找是指,如果一个函数调用的参数类型来自某个命名空间,那么首先要在这个命名空间中查找这个函数是否存在,然后再到其他的地方查找。比如,有一个调用“std::cout << someObject”,要先到someObject所定义的命名空间中查找运算符<<的定义,然后再到通常的地方去查找。这种查找方式,在这种将运算符<<与运算符操作的类型定义在同一命名空间中的典型应用里,非常有用。

 

2 这么多年,我提出的很多指导,已经成为了C++社区一部分人的“基本常识”。我的主要贡献并不是提出这些指导,而是普及他们。

 

3 如果你像我一样,曾经是专栏作家,你就能了解这是多么了不起的一件事了。我一年有六次,要为写这种值得阅读的东西而烦恼。而就我所知的,Sutter每个月就要有三次。

 

4 他同时也在微软做C++/CLI的架构工作,我只在注释里提一下。因为我认为C++/CLI仅仅是C++的一个变种,而不是C++本身。当然,我始终不知道他面对这么多的工作,是如何分配时间的。

 

5 这并不是说他发现了所有他写的或者他宣传的东西。特别是在2001年进修博士后,他经常把学术研究的结果带给广大的C++社区。一个特别的例子,就是他的有关于锁无关编程的作品和展示。

  评论这张
 
阅读(624)| 评论(6)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017