stl之父访谈录

stl之父访谈录

ID:34520365

大小:52.05 KB

页数:10页

时间:2019-03-07

stl之父访谈录_第1页
stl之父访谈录_第2页
stl之父访谈录_第3页
stl之父访谈录_第4页
stl之父访谈录_第5页
资源描述:

《stl之父访谈录》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、STL之父访谈录1995年3月Dr.Dobb'sJournal特约记者著名技术书籍作家AlStevens采访了STL创始人AlexanderStepanov这份访谈纪录是迄今为止对于STL发展历史的最完备介绍侯捷先生在他的STL有关文章里推荐大家阅读这篇文章因此我将该文全文翻译如下Q您对于genericprogramming进行了长时间的研究请就此谈谈A我开始考虑有关GP的问题是在7O年代末期当时我注意到有些算法并不依赖于数据结构的特定实现而只是依赖于该结构的几个基本的语义属性于是我开始研究大量不同的算法结果发现大部分算法可以用这种方法从特定实现中抽象出来而且效率无损对我来说效率

2、是至关重要的要是一种算法抽象在实例化会导致性能的下降那可不够棒当时我认为这项研究的正确方向是创造一种编程语言我和我的两个朋友一起开始干起来一个是现在的纽约州立大学教授DeepakKapur另一个是伦塞里尔技术学院教授DavidMusser当时我们三个在通用电器公司研究中心工作我们开始设计一种叫Tecton的语言该语言有一种我们称为"通用结构"的东西其实不过是一些形式类型和属性的集合体人们可以用它来描述算法例如一些数学方面的结构充许人们在其上定义一个代数操作精化之扩充之做各种各样的事虽然有很多有趣的创意最终该项研究没有取得任何实用成果因为Tecton语言是函数型语言我们信奉Back

3、us的理念相信自己能把编程从vonNeumann风格中解放出来我们不想使用副效应这一点限制了我们的能力因为存在大量需要使用诸如"状态""副效应"等观念的算法我在70年代末期在Tecton上面所认识到了一个有趣的问题被广泛接受的ADT观念有着根本性的缺陷人们通常认为ADT的特点是只暴露对象行为特征而将实现隐藏起来一项操作的复杂度被认为是与实现相关的属性所以抽象的时候应予忽略我则认识到在考虑一个(抽象)操作时复杂度(或者至少是一般观念上的复杂度)必须被同时考虑在内这一点现在已经成了GP的核心理念之一例如一个抽象的栈stack类型仅仅保证你push进去的东西可以随后被pop出来是不够的

4、同样极端重要的是不管stack有多大你的push操作必须能在常数时间内完成如果我写了一个stack每push一次就慢一点那谁都不会用这个烂玩艺我们是要把实现和界面分开但不能完全忽略复杂度复杂度必须是而且也确实是横陈于模块的使用者与实现者之间的不成文契约ADT观念的引入是为了允许软件模块相互可替换但除非另一个模块的操作复杂度与这个模块类似否则你肯定不愿意实现这种互换如果我用另外一个模块替换原来的模块并提供完全相同的接口和行为但就是复杂度不同那么用户肯定不高兴就算我费尽口舌介绍那些抽象实现的优点他肯定还是不乐意用复杂度必须被认为是接口的一部分1983年左右我转往纽约布鲁克林技术大学任

5、教开始研究的是图的算法主要的合作伙伴是现在IBM的AaronKershenbaum他在图和网络算法方面是个专家我使他相信高序(highorder)的思想和GP能够应用在图的算法中他支持我与他合作开始把这些想法用于实际的网络算法某些图的算法太复杂了只进行过理论分析从来没有实现过他企图建立一个包含有高序的通用组件的工具箱这样某些算法就可以实现了我决定使用Lisp语言的一个变种Scheme语言来建立这样一个工具箱我们俩建立了一个巨大的库展示了各种编程技术网络算法是首要目标不久当时还在通用电器的DavidMusser加了进来开发了更多的组件一个非常大的库这个库供大学里的本科生使用但从未商

6、业化在这项工作中我了解到副效应是很重要的不利用副效应你根本没法进行图操作你不能每次修改一个端点(vertex)时都在图上兜圈子所以当时得到的经验是在实现通用算法时可以把高序技术和副效应结合起来副效应不总是坏的只有在被错误使用时才是1985年夏我回到通用电器讲授有关高序程序设计的课程我展示了在构件复杂算法时这项技术的应用有一个听课的人叫陈迩当时是信息系统实验室的主任他问我是否能用Ada语言实现这些技术形成一个工业强度的库并表示可以提供支持我是个穷助教所以尽管我当时对于Ada一无所知我还是回答"好的"我跟DaveMusser一起建立这个Ada库这是很重要的一个时期从象Scheme那样

7、的动态类型语言(dynamicallytypedlanguage)转向Ada这样的强类型语言使我认识到了强类型的重要性谁都知道强类型有助于纠错我则发现在Ada的通用编程中强类型是获取设计思想的有力工具它不仅是查错工具而且是思想工具这项工作给了我对于组件空间进行正交分解的观念我认识到软件组件各自属于不同的类别OOP的狂热支持者认为一切都是对象但我在Ada通用库的工作中认识到这是不对的二分查找就不是个对象它是个算法此外我还认识到通过将组件空间分解到几个不同的方向上我们可以减少组件的数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。