作者介绍
C++是一门技术,而其背后支持它的是人——这些人发明、完善、繁荣和应用技术。本周,我将介绍我心目中最重要的五位C++大师。
本周名单上的这些人都拥有巨大的公众影响力。这些“公众人物”(抱歉,都是男性,不过我也没办法)能对很多人产生直接影响。受你影响的人越多,你自然就越重要。
不过,在系列的开篇文章里我也提到过,我是一个C++局外人。可能还有一些在台前幕后对C++产生了重要影响的人物不为我知。Stroustrup或许只是为众多技术工作者代言,标准委员也可能是替代一些不愿抛头露面团体做前台表演。如果是这样,那他们还真的达到目的了:我不知道他们。当然也就不会出现在我的名单上。
另外,我对入选者还有两点要求:(1)应该长期从事C++工作;(2)现在仍在为C++工作。重要的人很多,但最重要的人应该是长期而持续为C++做出贡献,并且直到现在仍在努力。
好了,现在公布我的名单,以较之新闻组文章更正式发表物(当然,这肯定比他们实际开始C++工作的时间晚,因为任何成果在产生影响力前都需要一个周期)的时间为序。在此,我仍然限制为五个名额,没有并列,也没有荣誉奖。因为我这是品活人而不是评静物,难度很大啊。规矩就是规矩,我必须要坚持。
不过,Koenig最让我感到吃惊的是别人对他的提及率,特别是在C++标准化方面。他一直是引导公众认识STL重要性的践行者,并带领Alexander Stepanov(译者注:原Compaq首席科学家,现Adobe首席科学家,STL之父)将STL引入C++标准。
我已经记不清多少次听到或读到标准化委员会成员类似这样的话了:“我们也在考虑这个问题,但Andrew指出……”,“那的确是个问题,不过Andrew建议……”。事实上据我所知,Koenig是唯一被以其名字命名C++语言特性的人——在标准化工作中,人们发现命名空间相关的名字搜索规范有时会导致编译失败,比如:
std::cout << someObject;
Koenig对此提出了修改意见,这就是后来的“Koenig lookup”[注释1]。在标准中,此规范的官方名称是ADL(argument-dependent lookup),但《Standard》对其的详细描述,则是“[basic.lookup.koenig]”(如果你一定要知道出处,那我告诉你,3.4.2小节)。
显然,我在C++标准工作中也扮演了一个小角色。嗯,别误会(译者注:他并没有正式从事C++标准工作,具体可见http://blog.csdn.net/lxpbuaa/archive/2006/11/09/1375988.aspx中他对自己的说明),我的意思是至少有两份标准建议稿,都受到我的影响:“我们还需要进一步讨论这个问题,因为即便Scott Meyers也还没弄明白”(如TR1中有关增加智能指针的建议部分(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1450.html),可以在页面里搜索我的名字)。
即便抛开与Herb Sutter合著的《C++ Coding Standards》(Addison-Wesley, 2005),他发表的40多篇文章(http://erdani.org/publications/main.html)也充分展示了他在对象拷贝(object copying)、对齐约束(alignment constraint)、多线程编程、异常安全和搜索等领域的巨大贡献;他常常将性能提升看得比符合标准更为重要。以我看来,近几年来工作值得我们一直关注的,仅此Alexandrescu。绝大多数其他写作者和报告人(包括我)时常会奔回收割过的田野一遍遍巡视,以期捡到遗留的麦穗,而Alexandrescu却以其无人望其项背的速度,不断开荒,还在里面种上了新的庄稼[注释5]。
截至目前,我已经开出了C++历史上最重要的图书、文献、软件和人物名单。这些名单相对来说是比较客观的,但在此系列的最后一篇文章里,我想抛开客观,完全表达下自己的主观想法。下次,我将列出C++最重要的五个历史时刻——五个突然来临后,我对C++语言、工作方式及其应用的认识达到新高度的时刻。
注释:
1.简单来说,Koenig lookup指的是:如果函数的参数类型定义在名字空间内,那么函数被调用时,首先应该在此名字空间内搜索被调用函数,然后再是其他地方。比如调用“std::cout << someObject”,应该首先在定义someObject的名字空间内搜索操作符“<<”的实现。像<<这样的操作符函数,如果在被它操作的类型的名字空间内也有定义,Koenig lookup就发挥作用了。
2.我这些年公布的大多数规范都已经成为C++社区的“基本常识”。我的主要贡献不是去自己发明发现这些规范,而是普及之。
3.如果你像我一样,也作过专栏作家,那么你就能更容易理解其工作量之浩繁。我已经很难做到一年六次跟踪那些值得阅读的东西,而Sutter众所周知是每月三次。
4.他还是Microsoft的C++/CLI首席架构师。将这点放在注释里说明,是因为我认为C++/CLI是C++的一个分支语言,而不是C++本身的一部分。直到现在,我仍然搞不清他哪来那么多时间同时开展这么多工作。
5.当然这并不是说所有他写的和提到的东西都是他首创的。尤其是他2001年开始读博士后,也常常会将学术上的研究成果传播到C++社区,例如无锁编程(lock-free programming)(http://erdani.org/publications/cuj-2004-10.pdf)。
>> 本文固定链接: http://www.vcgood.com/archives/1529