STL之父访谈录 Generic programmi
- 格式:doc
- 大小:64.71 KB
- 文档页数:26
人工大脑之父的推理生活2010-02-10 11:14:07 张撞鹿的博客只要给雨果·德·加里斯教授一个数学模型,他莫测高深的世界就会清晰起来。
与别人沟通时出现障碍,他习惯从堆满了书籍的沙发上,抽出一面有字的废纸,在背面刷刷地画起坐标轴,通过三条不规则的直线,他能简明易懂地说清问题的关节所在。
这时,他会得意地耸一下肩,整个人斜靠在沙发上说:“数学也许不能解决所有问题,但他能解决许多问题。
”雨果投身“人工智能”研究将近20年,在这个领域享有很高的声誉。
他开创的“可进化硬件和量子计算的研究”是人工智能领域的启动技术。
不久前,美国ABC为拍摄《地球的最后岁月》,邀请了霍金等7位全球著名科学家对地球的未来进行了预测,雨果是7人之一,他对“人工智能机器”的展望和霍金的“黑洞”理论,被并列为人类面临的7大威胁之中。
“当现在的人工智能机器达到一定智能水平之后,它们将会失去控制,以我们无法想象的速度自行进化,以至于远远地把我们抛在后面。
”在新书《智能简史》中,他这样预言。
这个论调通过媒体传遍世界,一部分人赞同,另一部分人则对此嗤之以鼻。
在同行眼中,雨果“介于‘完全的怪人’和‘超越时代的天才’之间”。
而更通俗的称呼则来自媒体:“人工大脑之父”,和“人工智能领域的霍金”。
雨果曾在美国犹他州、比利时布鲁塞尔、日本东京等重点实验室领衔人工智能研究。
2006年,他被中国武汉大学国际软件学院聘为全职教授。
如今,他和自己的中国妻子雷国庆生活在武大的校园里,一处学校专门为他们提供的居所内。
“人工智能”威胁论所引起的争论和风波,在这里似乎完全感受不到,在他眼里,这个危言耸听的预言,只是简单的数学推理而已。
在妻子雷国庆看来,雨果的大部分生活是依靠数学维系的。
住宾馆之前,他会询问房间面积大小和内部的摆设,然后计算出房间是否拥挤,而不肯事先打开房门看一下。
评价某个女生的美貌时,他也总是经过一番斟酌,然后报出数字:“7.5分到8分之间。
计算机之父童年的故事
计算机之父的童年故事是指阿兰·图灵(Alan Turing)的童年经历。
阿兰·图灵是英国的数学家、逻辑学家和计算机科学家,被公认为计算机科学的奠基人之一。
阿兰·图灵于1912年6月23日出生在英国伦敦的一个中产家庭。
他的父亲是英国印度陆军的成员,在印度期间认识了阿兰的母亲。
阿兰是家中两个孩子中的次子,他的姐姐名叫朱尼特。
阿兰从小就展示出了非凡的智力和对数学的兴趣。
在他上小学时,他的老师就注意到了他的数学才能。
他在数学方面的天赋逐渐显露出来,他在初中时就开始研究高级数学课程,并在数学竞赛中取得了优异的成绩。
除了数学,阿兰还对科学和机械产生了浓厚的兴趣。
他经常进行各种实验,拆解他的玩具并试图了解它们的内部工作原理。
他还自己制作了一些机械装置,如机械计算器和电报机。
阿兰的童年并不完全是充满乐趣和成功的。
他在学校中受到了同学的欺凌和排斥,因为他显得与众不同。
他对同性的情感也给他带来了困扰,因为当时的社会对同性恋持有歧视态度。
然而,这些困难并没有阻止阿兰追求他的兴趣和学术成就。
他在剑桥大学学习数学,并在1936年发表了一篇论文,提出了著名的“图灵机”概念,这被认为是现代计算机的原型。
阿兰·图灵的童年故事展示了他早期对数学和科学的热情,以及他克服困难和追求学术成就的决心。
他的贡献对计算机科学和人工智
能领域产生了深远的影响,使他成为计算机之父的称号的当之无愧。
盲人透过3D打印系统看到了新的家盲人透过3D打印系统看到了新的家刘易斯维妮大学快速原型技术中心(RPC)与Harvest科技公司,是3D Systems产品的服务供货商,他们将使用SLA和SLS三维打印科技,创造一栋建筑的模型并将这个计划命名为「极端修改:家庭编辑」。
十九岁的休斯,是家里的长子,主修西班牙文,他虽然眼盲并有肢体残疾,却克服万难和各种挑战成为一名演奏家。
「极端修改」团队计划将在七天内重建休斯的房子,让它成为安全的无障碍环境。
RPC与海维斯科技将使用3D Systems三维打印技术完成建筑模型。
他们给了休斯两个模型分别使用SLS DuraForm PA材料及SLA Accura 25材料,让他能够「看」到整个建筑的形状和布局,透过触摸,他兴奋的体验到他们未来的新家。
「如果不用我们的三维打印,他将不会了解到楼面布置及外观的形状」RPC的Tim这样说着。
「我们这样做并不是想炫耀我们的技术,而是为了帮助这个上进的年轻人」。
48个小时内完成模型Tim拜托了精华家的Louisville用软件来建构休斯的新房子。
并请Harvest科技公司的David 使用3D Systems三维打印设备来完成这件模型。
休斯家庭开心的庆祝他们有一个DuraForm PA塑料模型的新家,完成「极端修改:家庭编辑」这个计划。
「我们不允许有失败的机会」,Tim说。
「如果我们放弃帮助休斯建构这个模型。
我不敢相信,我该如何说服这年轻人来帮助其它人」David正在分享这个故事。
原本休斯只能够靠着想象来了解他新的房子,而「极端修改」团队,精华家的总裁Joe思考着,必须找出一个方式来让他「看」到新的家。
「模型比我们期待的更为真实」,乔说着。
「屋顶是可以移动的,将屋顶拿开后休斯就能够在房子内触摸各个地方及墙壁位置。
他正开心的学习如何在新家完成一条新的动线。
快速,可靠RPC花了25个小时将房子的2D设计图建立到一个3D立体图面。
接下来使用3D Systems 的SLA三维打印(雷射烧结液态树脂)与SLS三维打印(雷射烧结粉末)这两种快速原型技术来完成实体模型。
再呓C++“C++是一个足够复杂,但因为其复杂而变得足够有趣的语言”----------云风之所以写这篇文章,很大程度上要归咎于一年前曾经许诺过要写一篇关于STL方面的学习心得。
我想我还算一个遵守承诺的人,尽管曾经许下的很多承诺都已随风逝去,不过还好,我还有坚持下去的勇气。
经过一年来断断续续的学习,从模板知识到STL标准库,再到STL源码剖析,还算看了几本大作,七窍里面也通了六窍,虽说越看越觉得没谱,但也有必要对已学过知识进行一些总结整理,当然这主要是个人在学习过程中的一个感悟和在模板中较为关键部分的概括,而不是一篇任何意义上的教程,算是温故而知新吧。
“好记性不如烂笔头”,工作后总是很怀念这句话,也许是大学期间听了太多次这句话吧。
最后,当我开始提笔写这篇文章的时候,我期望能够赶在11月底前完成,然后等待某个时刻的到来。
虽然如今的他多少让人觉得有点江郎才尽的感觉,虽然最近的一次感动也已经是两年前的《不能说的秘密》,但周董的新专辑终究是这乏味生活中的一丝期待。
此刻应该有很多人抓狂般的将鼠标移到了叉号上吧?手下留情,我们马上开始这篇关于C++的不能不说的秘密,人类历史上最伟大的财富(之一):C++ Template &Standard Template Library。
History"Andy, are you crazy?"“Well, yes I am crazy, but why not try it?”这是Alexander Stepanov在收到Andy Koenig邮件时的简单对话。
时间也回溯到1994年1月6日,当时的Koenig在给Stepanov的电子邮件中表示如果Stepanov愿意将STL的说明文件撰写齐全,在1月25日前提出,便可能成为标准C++的一部份。
于是在Alexander和Lee的拼命赶工中,STL也开始了自己疯狂的C++标准化之旅。
而在这部STL纪传体史书中,我们至少应该记住如下五个人物。
深度学习之父
去年 11 月,“深度学习之父”、计算机科学家、认知心理学家杰弗里・辛顿(Geoffrey Hinton)进行了一次预测。
经过了半个世纪的尝试之后——其中一些取得了巨大的成功,辛顿对大脑的工作原理以及将其复制到电脑中的方法有了更加深刻的认识。
新冠大流行期间,辛顿一直在多伦多的家庭办公室中隔离。
他说道,“这是我目前能够想到的最好的想法。
”如果这个想法能够实现,那么它可能会给下一代的人工神经网络带来启发。
这种数学计算系统的设计灵感来自于大脑的神经元和突触,而它也是当今人工智能的核心技术。
正如辛顿所说的那样,他的“根本动机”源自好奇心。
然而,实际动机——最理想的结果,却是设计出更加可靠、更加值得信赖的人工智能系统。
作为谷歌研究员与向量人工智能研究所联合创始人的辛顿,断断续续写下了自己的想法,并于 2 月末在推特上宣布,他在 arXiv 预印本服务器上发表了一篇 44 页的论文。
计算机科学之父作文
计算机科学之父,艾伦·图灵,他可是个传奇人物!听说他小
时候就聪明得不得了,长大后更是不得了,直接玩转了计算机科学。
你知道吗?图灵提出的图灵机理论,简直就是计算机界的“圣经”!这个理论让计算机从无到有,从简单到复杂,一步一步走到
了现在。
真是难以想象,没有他,我们现在的生活会变成啥样。
不过,图灵可不仅仅是个理论家。
他还是个实战派的密码破译
高手!二战时期,他帮助盟军破解了敌人的密码,为战争胜利立下
了汗马功劳。
真是太牛了!
不过,话说回来,图灵的人生也挺波折的。
他虽然是天才,但
也有很多烦恼和挣扎。
可能正是因为这些经历,让他更加珍惜自由
和人性,也让他的思想更加独特和深邃。
总的来说,艾伦·图灵这个计算机科学之父,真是个了不起的
人物!他的智慧和贡献,将永远照耀在人类文明的历史长河中。
STL之父访谈录
孟岩
【期刊名称】《程序员》
【年(卷),期】2001(000)002
【摘要】Dr.Dobb’s Journal特约记者,著名技术书籍作家Al Stevens采访
了STL创始人Alexander Stepanov。
这份访谈记录是迄今为止对于STL发展历
史的最完备介绍。
侯捷先生在他的STL有关文章里推荐大家阅读这篇文章。
【总页数】7页(P38-44)
【作者】孟岩
【作者单位】无
【正文语种】中文
【中图分类】TP311
【相关文献】
1.盐藻素,天生非等闲——中国“盐藻素之父”徐贵义教授访谈录 [J], 王林强;凌学江;
2.我的目标永远是让人开怀Perl之父LarryWall访谈录 [J], 卢鸫翔;王江平;
3.C++之父Bjarne Stroustrup访谈录 [J], 高博;吴天明;周梦伊;
4.PHP之父访谈录(上) [J], 邱海峰(译)
5.过去和未来、网络和现实的交接点——赛博朋克运动之父威廉·吉布森访谈录 [J], 鞠海彦
因版权原因,仅展示原文概要,查看原文内容请购买。
特德·霍夫:英特尔的镇山之宝的发明人 2004年09月27日 16:54 新浪科技新浪科技独家授权连载《挑战英特尔——中国IT业第一垄断》。
此书由方向前、方兴东著,中国海关出版社出版。
以下为本书内容之一。
谦虚谨慎的微处理器发明者计算机产业的腾飞借助于三项最重要的发明,一项是贝尔实验室肖克利等三人发明的晶体管,一项是诺伊斯和基尔比发明的集成电路。
另一项则是特德·霍夫1971年发明的微处理器。
这种机器是如此富于创造性和革命性,以至一开始,没有人知道拿它来做什么用。
然而,在两年之内,人们开始认识到微处理器带来的创新使计算机工业产生了根本的变革,查尔斯·巴贝奇的巨大工厂浓缩进了这个小小的微型宇宙中。
与前两项产品的发明者不同,霍夫既没有享受到巨大的财富,也没有因此获得什么特别的荣耀。
迄今,这项发明人还未得到公众的充分认识。
但是,霍夫的发明如此重要,使其可以无愧地跻身于20世纪最伟大的科学家之列。
对于自己的成就,霍夫一向保持着低姿态。
因为一种不为公众所瞻目的形象更有助于他继续从事新产品的发明。
当他在叙述自己发明微处理器过程的细节时,就象是一名学生在向老师汇报他刚刚结束的暑假活动。
但这种谦逊的态度并不能改变这项发明的意思。
著名的《经济学家》杂志将霍夫称作是“第二次大战以来最有影响的7位科学家之一”。
1978年,他被提升为英特尔研究员(至今只有另外一个人获得过类似的称号)。
这意味着,他在研究方面具有很大的自主权。
他主要研究多种开创性的技术问题。
他喜欢这类具有挑战性的工作。
在完成微处理器之后,他又着手研制一种语言识别装置,可复制人类的语言,它是以英特尔“2920型”为基础的。
霍夫和他的两位同事获得了“2920型”的专利,这是霍夫的第14项专利。
霍夫认为自己占了天时和地利之便:“如果我们没有在1971年,发明…4004‟微处理器,那么别的什么人也会在一两年里发明它”。
微处理器的诞生使人们认识到,用霍夫的话来说,“计算机这种智能体非常适合市场销售”。
Linux、Git之⽗LinusTorvalds的别样技术⼈⽣嘉宾|Linus Torvalds 采编|⽊环带你认识⼀个,不⼀样的 Linus Torvalds!1写在前⾯提起 Linus Torvalds ⼤家的第⼀反应是怎样的?是严苛刻薄,还是神级伟⼤,亦或是孤傲清⾼?⼆⼗五年来,Linus Torvalds ⼀直坚持在技术第⼀线,开发了 Linux 和 Git 两个项⽬,并深刻影响了软件⾏业。
如果没有 Linux,就不会有基于 Linux 的安卓系统,那世界是怎样的?如果没有 Git 的诞⽣,就不会基于 Git 的 GitHub,那么开源的兴旺之势将会迟来多久?有⼈问 Linus,你是如何成长为今天的你⾃⼰的?Linus Torvalds 说,我本⼈并不适合回答这个问题,因为这是个渐进不⾃知的过程;应该请⼀个不会天天见到他的⼈以第三⽅视⾓,来谈谈⼀个不敢直视别⼈眼睛的⼗⼆岁书⾍⼩男孩怎样蜕变成今天的样⼦的。
虽然现在,Linus 已经很⼤程度上摆脱了社交恐惧症,⾯对媒体和观众们可以侃侃⽽谈;但是他依然认为⾃⼰不擅长于与⼈打交道。
他认为贡献开源项⽬通过邮件与⼈互动,给⼈缓冲是他更喜欢的交流⽅式。
他不喜欢直⾯很多⼈⼀起⼯作,⽽ Linux 和 Git 两个项⽬则恰恰是他所喜欢的⼯作形式体现。
Linus称开源社区需要有沟通专家,他们温暖⽽友善,但遗憾的是他⾃⼰并不是这样的⼈。
Linus Torvalds 极度热爱技术,但并不是泛 IT 技术的追随者,他从来没有写过 web 程序、不会设置 FTP 服务器的他有着很聚焦的技术关注点。
Linus 的技术兴趣很挑剔,“如果我被困在⼀个孤岛上,唯⼀逃⽣的机会就是写出⼀套漂亮的 UI,那么我死定了。
所以⼈与⼈是不⼀样的,我不是在找借⼝,我只是在解释。
”但是,他并不是⼀根筋的洁癖开源理想者,很早他就思考了商业对开源的作⽤;他很开⼼也很感激商业公司和基⾦会帮他处理所有那些他不愿意处理的事情,并且可以做到完全放权、不管不问。
蓝色帝国的开拓者——沃森父子 (下篇)——沃森父子引导
IBM进入计算机时代
高晓黎
【期刊名称】《科学之友:A版》
【年(卷),期】1999(000)011
【摘要】IBM 与计算机结缘的历史,最早要追溯到1936年。
当时由 IBM 出资100万,资助哈佛大学的艾肯博士研制出了世界上最早的计算机 Mark 一号,并在海军中发挥作用。
但在当时,计算机这一新生事物,毕竟只是个蹒跚学步的幼童,老沃森自然意识不到它巨大的市场潜力。
最先意识到这一点的是小沃森。
小沃森在空军服役期间,已经接触到了计算机。
当时凭借着敏锐的直觉,他就对这一高科技产品光明的前景确信不疑。
退役回来后,小沃森再三提醒父亲:人类的计算方式正在发生着悄悄的改变,IBM 公司销售了几十年的机械式计算打孔机,早晚要退出历史舞台,让位于当今被称作"电子计算机"的新产品。
老沃森对儿子的话半信半疑,就
【总页数】2页(P-,26)
【作者】高晓黎
【作者单位】
【正文语种】中文
【中图分类】K837.12
【相关文献】
1.IBM沃森健康发展失利折射AI应用四大误区 [J], 李雅琪
2.IBM沃森成败录 [J], 王玉峰; 蔡文杰
3.IBM沃森成败录 [J], 王玉峰; 蔡文杰
4.蓝色帝国的开拓者——沃森父子 [J], 高晓黎
5.赢创加入MIT-IBM沃森人工智能实验室,借助AI技术推进创新 [J],
因版权原因,仅展示原文概要,查看原文内容请购买。
STL之父访谈录GenericprogrammiSTL之父访谈录-Generic programming(GP)rather than OOP2010-07-20 01:05STL之父访谈录1995年3月,Dr.Dobb's Journal特约记者,著名技术书籍作家Al Stevens采访了STL创始人Alexander Stepanov.这份访谈纪录是迄今为止对于STL发展历史的最完备介绍,侯捷先生在他的STL有关文章里推荐大家阅读这篇文章.因此我将该文全文翻译如下:Q:您对于generic programming进行了长时间的研究,请就此谈谈.A:我开始考虑有关GP的问题是在7O年代末期,当时我注意到有些算法并不依赖于数据结构的特定实现,而只是依赖于该结构的几个基本的语义属性.于是我开始研究大量不同的算法,结果发现大部分算法可以用这种方法从特定实现中抽象出来,而且效率无损.对我来说,效率是至关重要的,要是一种算法抽象在实例化会导致性能的下降,那可不够棒.当时我认为这项研究的正确方向是创造一种编程语言.我和我的两个朋友一起开始干起来.一个是现在的纽约州立大学教授Deepak Kapur,另一个是伦塞里尔技术学院教授David Musser.当时我们三个在通用电器公司研究中心工作.我们开始设计一种叫Tecton的语言.该语言有一种我们称为"通用结构"的东西,其实不过是一些形式类型和属性的集合体,人们可以用它来描述算法.例如一些数学方面的结构充许人们在其上定义一个代数操作,精化之,扩充之,做各种各样的事.虽然有很多有趣的创意,最终该项研究没有取得任何实用成果,因为Tecton 语言是函数型语言.我们信奉Backus的理念,相信自己能把编程从von Neumann风格中解放出来.我们不想使用副效应,这一点限制了我们的能力,因为存在大量需要使用诸如"状态","副效应"等观念的算法.我在70年代末期在Tecton上面所认识到了一个有趣的问题:被广泛接受的ADT观念有着根本性的缺陷.人们通常认为ADT的特点是只暴露对象行为特征,而将实现隐藏起来.一项操作的复杂度被认为是与实现相关的属性,所以抽象的时候应予忽略.我则认识到,在考虑一个(抽象)操作时,复杂度(或者至少是一般观念上的复杂度)必须被同时考虑在内.这一点现在已经成了GP的核心理念之一.例如一个抽象的栈stack类型,仅仅保证你push进去的东西可以随后被pop出来是不够的,同样极端重要的是,不管stack有多大,你的push操作必须能在常数时间内完成.如果我写了一个stack,每push一次就慢一点,那谁都不会用这个烂玩艺.我们是要把实现和界面分开,但不能完全忽略复杂度.复杂度必须是,而且也确实是横陈于模块的使用者与实现者之间的不成文契约.ADT观念的引入是为了允许软件模块相互可替换.但除非另一个模块的操作复杂度与这个模块类似,否则你肯定不愿意实现这种互换.如果我用另外一个模块替换原来的模块,并提供完全相同的接口和行为,但就是复杂度不同,那么用户肯定不高兴.就算我费尽口舌介绍那些抽象实现的优点,他肯定还是不乐意用.复杂度必须被认为是接口的一部分.1983年左右,我转往纽约布鲁克林技术大学任教.开始研究的是图的算法,主要的合作伙伴是现在IBM的Aaron Kershenbaum.他在图和网络算法方面是个专家,我使他相信高序(high order)的思想和GP能够应用在图的算法中.他支持我与他合作开始把这些想法用于实际的网络算法.某些图的算法太复杂了,只进行过理论分析,从来没有实现过.他企图建立一个包含有高序的通用组件的工具箱,这样某些算法就可以实现了.我决定使用Lisp语言的一个变种Scheme语言来建立这样一个工具箱.我们俩建立了一个巨大的库,展示了各种编程技术.网络算法是首要目标.不久当时还在通用电器的David Musser加了进来,开发了更多的组件,一个非常大的库.这个库供大学里的本科生使用,但从未商业化.在这项工作中,我了解到副效应是很重要的,不利用副效应,你根本没法进行图操作.你不能每次修改一个端点(vertex)时都在图上兜圈子.所以,当时得到的经验是在实现通用算法时可以把高序技术和副效应结合起来.副效应不总是坏的,只有在被错误使用时才是.1985年夏,我回到通用电器讲授有关高序程序设计的课程.我展示了在构件复杂算法时这项技术的应用.有一个听课的人叫陈迩,当时是信息系统实验室的主任.他问我是否能用Ada语言实现这些技术,形成一个工业强度的库,并表示可以提供支持.我是个穷助教,所以尽管我当时对于Ada一无所知,我还是回答"好的".我跟Dave Musser一起建立这个Ada库.这是很重要的一个时期,从象Scheme那样的动态类型语言(dynamically typed language)转向Ada这样的强类型语言,使我认识到了强类型的重要性.谁都知道强类型有助于纠错.我则发现在Ada的通用编程中,强类型是获取设计思想的有力工具.它不仅是查错工具,而且是思想工具.这项工作给了我对于组件空间进行正交分解的观念.我认识到,软件组件各自属于不同的类别.OOP的狂热支持者认为一切都是对象.但我在Ada通用库的工作中认识到,这是不对的.二分查找就不是个对象,它是个算法.此外,我还认识到,通过将组件空间分解到几个不同的方向上,我们可以减少组件的数量,更重要的是,我们可以提供一个设计产品的概念框架.随后,我在贝尔实验室C++组中得到一份工作,专事库研究.他们问我能不能用C++做类似的事.我那时还不懂C++,但当然,我说我行.可结果我不行,因为1987年时,C++中还没有模板,这玩艺在通用编程中是个必需品.结果只好用继承来获取通用性,那显然不理想.直到现在C++继承机制也不大用在通用编程中,我们来说说为什么.很多人想用继承实现数据结构和容器类,结果几乎全部一败涂地.C++的继承机制及与之相关的编程风格有着戏剧性的局限.用这种方式进行通用编程,连等于判断这类的小问题都解决不了.如果你以X类作为基类,设计了一个虚函数operater==,接受一个X类对象,并由X派生类Y,那么Y的operator==是在拿Y类对象与X类对象做比较.以动物为例,定义animal类,派生giraffe(长颈鹿)类.定义一个成员函数mate(),实现与另一个哺乳动物的交配操作,返回一个animal对象.现在看看你的派生类giraffe,它当然也有一个mate()方法,结果一个长颈鹿同一个动物交配,返回一个动物对象.这成何体统?当然,对于C++程序员来说,交配函数没那么重要,可是operator==就很重要了.对付这种问题,你得使用模板.用模板机制,一切如愿.尽管没有模板,我还是搞出来一个巨大的算法库,后来成了Unix System Laboratory Standard Component Library的一部分.在Bell Lab,我从象Andy Koenig,Bjarne Stroustrup(Andrew Koenig,前ISO C++标准化委员会主席;Bjarne Stroustrup,C++之父--译者)这类专家身上学到很多东西.我认识到C/C++的重要,它们的一些成功之处是不能被忽略的.特别是我发现指针是个好东东.我不是说空悬的指针,或是指向栈的指针.我是说指针这个一般观念.地址的观念被广泛使用着.没有指针我们就没法描述并行算法.我们现在来探讨一下为什么说C是一种伟大的语言.通常人们认为C是编程利器并且获得如此成功,是因为UNIX是用C写的.我不同意.计算机的体系结构是长时间发展演变的结果,不是哪一个聪明的人创造的.事实上是广大程序员在解决实际问题的过程中提出的要求推动了那些天才提出这些体系.计算机经过多次进化,现在只需要处理字节地址索引的内存,线性地址空间和指针.这个进化结果是对于人们要求解决问题的自然反映.Dennis Ritchie天才的作品C,正反映了演化了30年的计算机的最小模型.C当时并不是什么利器.但是当计算机被用来处理各种问题时,作为最小模型的C成了一种非常强大的语言,在各个领域解决各种问题时都非常高效.这就是C可移植性的奥秘,C是所有计算机的最佳抽象模型,而且这种抽象确确实实是建立在实际的计算机,而不是假想的计算机上的.人们可以比较容易的理解C背后的机器模型,比理解Ada和Scheme语言背后的机器模型要容易的多.C的成功是因为C做了正确的事,不是因为AT&T 的极力鼓吹和UNIX.C++的成功是因为Bjarne Stroustrup以C为出发点来改进C,引入更多的编程技术,但始终保持在C所定义的机器模型框架之内,而不是闭门造车地自己搞出一个新的机器模型来.C的机器模型非常简单.你拥有内存,对象保存在那里面,你又有指向连续内存空间的指针,很好理解.C++保留了这个模型,不过大大扩展了内存中对象的范畴,毕竟C的数据类型太有限了,它允许你建立新的类型结构,但不允许你定义类型方法.这限制了类型系统的能力.C++把C的机器模型扩展为真正类型系统.1988年我到惠普实验室从事通用库开发工作.但实际上好几年我都是在作磁盘驱动器.很有趣但跟GP毫不相关.92年我终于回到了GP领域,实验室主任Bill Worley建立了一个算法研究项目,由我负责.那时候C++已经有模板了.我发现Bjarne的模板设计方案是非常天才的.在Bell Lab时,我参加过有关模班设计的几个早期的讨论,跟Bjarne吵得很凶,我认为C++的模板设计应该尽可能向Ada的通用方案看齐.我想可能我吵得太凶了,结果Bjarne决定坚决拒绝我的建议.我当时就认识到在C++中设置模板函数的必要性了,那时候好多人都觉得最好只有模板类.不过我觉得一个模板函数在使用之前必须先显式实例化,跟Ada似的.Bjarne死活不听我的,他把模板函数设计成可以用重载机制来隐式实例化.后来这个特别的技术在我的工作中变得至关重要,我发现它容许我做很多在Ada中不可能的任务.非常高兴Bjarne当初没听我的.Q:您是什么时候第一次构思STL的,最初的目的是什么?A:92年那个项目建立时由8个人,渐渐地人越来越少,最后剩下俩,我和李梦,而且李小姐是这个领域的新手.在她的专业研究中编译器是主要工作,不过她接受了GP研究的想法,并且坚信此项研究将带给软件开发一个大变化,要知道那时候有这个信念的认可是寥寥无几.没有她,我可不敢想象我能搞定STL,毕竟STL标着两个人的名字:Stepanov和Lee.我们写了一个庞大的库,庞大的代码量,庞大的数据结构组件,函数对象,适配器类,等等.可是虽然有很多代码,却没有文档.我们的工作被认为是一个验证性项目,其目的是搞清楚到底能不能在使算法尽可能通用化的前提下仍然具有很高的效率.我们化了很多时间来比较,结果发现,我们算法不仅最通用,而且要率与手写代码一样高效,这种程序设计风格在性能上是不打折扣的!这个库在不断成长,但是很难说它是什么时候成为一个"项目"的.STL的诞生是好几件事情的机缘巧合才促成的.Q:什么时候,什么原因促使您决定建议使STL成为ANSI/ISO标准C++一部分的?A:1993年夏,Andy Koenig跑到斯坦福来讲C++课,我把一些有关的材料给他看,我想他当时确实是很兴奋.他安排我9月到圣何塞给C++标准委员会做一个演讲.我演讲的题目是"C++程序设计的科学",讲得很理论化,要点是存在一些C++的基本元素所必须遵循的,有关基本操作的原则.我举了一些例子,比如构造函数,赋值操作,相等操作.作为一种语言,C++没有什么限制.你可以用operator==()来做乘法.但是相等操作就应该是相等操作.它要有自反性,A==A;它要有对称性,A==B 则B==A;它还要有传递性.作为一个数学公理,相等操作对于其他操作是基本的要素.构造函数和相等操作之间的联系就有公理性的东西在里边.你用拷贝构造函数生成了一个新对象,那么这个对象和原来那个就应该是相等的.C++是没有做强行要求,但是这是我们都必须遵守这个规则.同样的,赋值操作也必须产生相等的对象.我展示了一些基本操作的"公理",还讲了一点迭代子(iterator),以及一些通用算法怎样利用迭代子来工作.我觉得那是一个两小时的枯燥演讲,但却非常受欢迎.不过我那时并没有想把这个东西塞在标准里,它毕竟是太过先进的编程技术,大概还不适于出现在现实世界里,恐怕那些做实际工作的人对它没什么兴趣.我是在9月做这个演讲的,直到次年(1994)月,我都没往ANSI标准上动过什么脑筋.1月6日,我收到Andy Koenig的一封信(他那时是标准文档项目编辑),信中说如果我希望STL成为标准库的一部分,可以在1月25日之前提交一份建议到委员会.我的答复是:"Andy,你发疯了吗?",他答复道:"不错,是的我发疯了,为什么咱们不疯一次试试看?"当时我们有很多代码,但是没有文档,更没有正式的建议书.李小姐和我每星期工作80小时,终于在期限之前写出一份正式的建议书.当是时也,只有Andy一个人知道可能会发生些什么.他是唯一的支持者,在那段日子里他确实提供了很多帮助.我们把建议寄出去了,然后就是等待.在写建议的过程中我们做了很多事.当你把一个东西写下来,特别是想到你写的可能会成为标准,你就会发现设计中的所有纰漏.寄出标准后,我们不得不一段一段重写了库中间的代码,以及几百个组件,一直到3月份圣迭戈会议之前.然后我们又重新修订了建议书,因为在重新写代码的过程中,我们又发现建议书中间的很多瑕疵.Q:您能描述一下当时委员会里的争论吗?建议一开始是被支持呢,还是反对?A:我当时无法预料会发生些什么.我做了一个报告,反响很好.但当时有许多反对意见.主要的意见是:这是一份庞大的建议,而且来得太晚,前一次会议上已经做出决议,不在接受任何大的建议.而这个东西是有史以来最大的建议,包括了一大堆新玩艺.投票的结果很有趣,压倒多数的意见认为应对建议进行再考虑,并把投票推迟到下次会议,就是后来众所周知的滑铁卢会议.Bjarne Stroustrup成了STL的强有力支持者.很多人都通过建议、更改和修订的方式给予了帮助。