📄 stl.txt
字号:
A:抛开Intel的体系结构不谈,内存模式是一个对象,封装了有关指针的信息:这个指针的整型尺寸和
距离类型是什么,相关的引用类型是什么,等等。如果我们想利用各种内存,比如持久性内存,共享
内存等等,抽象化的工作就非常重要了。STL的一个很漂亮的特性是整个库中唯一与机器类型相关的
部分——代表真实指针,真实引用的组件——被封装到大约16行代码里,其他的一切,容器、算法等
等,都与机器无关(真是牛啊!)。从移植的观点看,所有及其相关的东西,象是地址记法,指针等
等,都被封装到一个微小的,很好理解的机制里面。这样一来,allocator对于STL而言就不是那么
重要了,至少不像对于基本数据结构和算法的分解那么重要。
Q:ANSI/ISO C标准委员会认为像内存模式这类问题是平台相关的,没有对此做出什么具体规定。C++委员
会会不会采取不同的态度?为什么?
A:我认为STL在内存模式这一点上跟C++标准相比是超前的。但是在C和C++之间有着显著的不同。C++有构造
函数和new操作符来对付内存模式问题,而且它们是语言的一部分。现在看来似乎让new操作符像STL容器
使用allocater那样来工作是很有意义的。不过现在对问题的重要性不像STL出现之前那么显著了,因为
在大多数场合,STL数据结构将让new失业。大部分人不再需要分配一个数组,因为STL在做这类事情上
更为高效。要知道我对效率的迷信是无以复加的,可我在我的代码里从不使用new,汇编代码表明其效率
比使用new时更高。随着STL的广泛使用,new会逐渐淡出江湖。而且STL永远都会记住回收内存,因为当
一个容器,比如vector退出作用域时,它的析构函数被调用,会把容器里的所有东西都析构。你也不必
再担心内存泄漏了。STL可以戏剧性地降低对于垃圾收集机制的需求。使用STL容器,你可以为所欲为,
不用关心内存的管理,自有STL构造函数和析构函数来对付。
Q:C++标准库子委员会正在制订标准名空间(namespace)和异常处理机制。STL类会有名空间吗,会抛出异
常吗?
A:是的。该委员会的几个成员正在考虑这件事,他们的工作非常卓越。
Q:现在的STL跟最终作为标准的STL会有多大不同?委员会会不会干预某些变化,新的设计会不会被严格地控
制起来?
A:多数人的意见看起来是不希望对STL做任何重要的改变。
Q:在成为标准之前,程序员们怎样的一些STL经验?
A:他们可以从butler.hpl.hp.com/stl当下STL头文件,在Borland和IBM或其他足够强劲的的编译器中使用它。
学习这种编程技术的唯一途径是编程,看看范例,试着用这种技术来编程。
Q:您正在和P. J. Plauger合作一本STL的书。那本书的重点是什么?什么时候面世?
A:计划95年夏天面世,重点是对STL实现技术的详解,跟他那本标准C库实现和标准C++库实现的书类似。他是
这本书的第一作者。该书可以作为STL的参考手册。我希望跟Bjarne合作另写一本书,在C++/STL背景下介绍
语言与库的交互作用。
好多工作都等着要做。为了STL的成功,人们需要对这种编程技术进行更多的试验性研究,更多的文章和书籍
应该对此提供帮助。要准备开设此类课程,写一些入门指南,开发一些工具帮助人们漫游STL库。STL是一个
框架,应该有好的工具来帮助使用这个框架。
(译者注:他说这番话时,并没有预计到在接下来的几年里会发生什么。由于Internet的大爆炸和Java、
VB、Delphi等语言的巨大成功,工业界的重心一下子从经典的软件工程领域转移到Internet上。再加上
标准C++直到98年才制订,完全符合要求的编译器直到现在都还没有出现,STL并没有立刻成为人们心中的
关注焦点。他提到的那本书也迟迟不能问世,直到前几天(2001年元旦之后),这本众人久已期盼的书
终于问世,由P. J. Plauger, Alexander Stepanov, Meng Lee, David Musser四大高手联手奉献,
Prentice Hall出版。不过该书主要关注的是STL的实现技术,不适用于普通程序员。
另外就P. J. Plauger做一个简介:其人是标准C中stdio库的早期实现者之一,91年的一本关于标准
C库的书使他名满天下。他现在是C/C++ Use's Journal的主编,与Microsoft保持着良好的,甚至是
过分亲密的关系,Visual C++中的STL和其他的一些内容就是出自他的那只生花妙笔。不过由于跟MS
的关系已经影响到了他的中立形象,现在有不少人对他有意见。
至于Stepanov想象中的那本与Stroustrup的书,起码目前是没听说。其实这两位都是典型的编程圣手,
跟Ken Thompson和Dennis Ritchie是一路的,懒得亲自写书,往往做个第二作者。如果作为第一作者,
写出来的书肯定是学院味十足,跟标准文件似的,不适合一般程序员阅读。在计算机科学领域,编程
圣手同时又是写作高手的人是凤毛麟角,最著名的可能是外星人D. E. Knuth, C++领域里则首推前面
提到的Andrew Koenig。可惜我们中国程序员无缘看到他的书。)
Q:通用编程跟OOP之间有什么关系?
A:一句话,通用编程是OOP基本思想的自然延续。什么是OOP的基本思想呢?把组件的实现和接口分开,并
且让组件具有多态性。不过,两者还是有根本的不同。OOP强调在程序构造中语言要素的语法。你必须
得继承,使用类,使用对象,对象传递消息。GP不关心你继承或是不继承,它的开端是分析产品的分类,
有些什么种类,他们的行为如何。就是说,两件东西相等意味着什么?怎样正确地定义相等操作?不单
单是相等操作那么简单,你往深处分析就会发现“相等”这个一般观念意味着两个对象部分,或者至少
基本部分是相等的,据此我们就可以有一个通用的相等操作。再说对象的种类。假设存在一个顺序序列
和一组对于顺序序列的操作。那么这些操作的语义是什么?从复杂度权衡的角度看,我们应该向用户提
供什么样的顺序序列?该种序列上存在那些操作?那种排序是我们需要的?只有对这些组件的概念型分
类搞清楚了,我们才能提到实现的问题:使用模板、继承还是宏?使用什么语言和技术?GP的基本观点
是把抽象的软件组件和它们的行为用标准的分类学分类,出发点就是要建造真实的、高效的和不取决于
语言的算法和数据结构。当然最终的载体还是语言,没有语言没法编程。STL使用C++,你也可以用Ada
来实现,用其他的语言来实现也行,结果会有所不同,但基本的东西是一样的。到处都要用到二分查找
和排序,而这就是人们正在做的。对于容器的语义,不同的语言会带来轻微的不同。但是基本的区别很
清楚是GP所依存的语义,以及语义分解。例如,我们决定需要一个组件swap,然后指出这个组件在不同的
语言中如果工作。显然重点是语义以及语义分类。而OOP所强调的(我认为是过分强调的)是清楚的定义
类之间的层次关系。OOP告诉了你如何建立层次关系,却没有告诉你这些关系的实质。
(这段不太好理解,有一些术语可能要过一段时间才会有合适的中文翻译——译者)
Q:您对STL和GP的未来怎么看?
A:我刚才提到过,程序员们的梦想是拥有一个标准的组件仓库,其中的组件都具有良好的、易于理解的和标
准的接口。为了达成这一点,GP需要有一门专门的科学来作为基础和支柱。STL在某种程度上开始了这项
工作,它对于某些基本的组件进行了语义上的分类。我们要在这上面下更多的功夫,目标是要将软件工程
从一种手工艺技术转化为工程学科。这需要一门对于基本概念的分类学,以及一些关于这些基本概念的定
理,这些定理必须是容易理解和掌握的,每一个程序员即使不能很清楚的知道这些定理,也能正确地使用
它。很多人根本不知道交换律,但只要上过学的人都知道2+5等于5+2。我希望所有的程序员都能学习一些
基本的语义属性和基本操作:赋值意味着什么?相等意味着什么?怎样建立数据结构,等等。
当前,C++是GP的最佳载体。我试过其他的语言,最后还是C++最理想地达成了抽象和高效的统一。但是
我觉得可能设计出一种语言,基于C和很多C++的卓越思想,而又更适合于GP。它没有C++的一些缺陷,特别
是不会像C++一样庞大。STL处理的东西是概念,什么是迭代子,不是类,不是类型,是概念。说得更正式
一些,这是Bourbaki所说的结构类型(structure type),是逻辑学家所说的理念(theory),或是类型
理论学派的人所说的种类(sort),这种东西在C++里没有语言层面上的对应物(原文是incarnation,直译
为肉身——译者),但是可以有。你可以拥有一种语言,使用它你可以探讨概念,精化概念,最终用一种
非常“程序化”(programmatic,直译为节目的,在这里是指符合程序员习惯的——译者)的手段把它们
转化为类。当然确实有一些语言能处理种类(sorts),但是当你想排序(sort)时它们没什么用处。我们
能够有一种语言,用它我们能定义叫做foward iterator(前向迭代子)的东西,在STL里这是个概念,没有
C++对应物。然后我们可以从forword iterator中发展出bidirectional iterator(双向迭代子),再发展
出random iterator。可能设计一种语言大为简化GP,我完全相信该语言足够高效,其机器模型与C/C++充分
接近。我完全相信能够设计出一种语言,一方面尽可能地靠近机器层面以达成绝对的高效,另一方面能够处
理非常抽象化的实体。我认为该语言的抽象性能够超过C++,同时又与底层的机器之间契合得天衣无缝。我认
为GP会影响到语言的研究方向,我们会有适于GP的实用语言。从这些话中你应该能猜出我下一步的计划。
mengyan
译于2001年1月
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=653143
[收藏到我的网摘] braveroc发表于 2006年04月06日 17:53:00
特别推荐:想在这里投放广告?点击查看详情
中软 JAVA培训,权威高质量培训
JAVA\.NET\测试工程师专业培训 全国就业率最高的企业定向式培训
《 C#高级编程(第4版)》在线阅读
C#经典名著 Wrox红皮书中最畅销的品种之一 CSDN读书频道独家奉献
Java/.NET企业级软件开发全攻略
Java EE企业级软件工程师必备手册
中软 JAVA培训,权威高质量培训
JAVA\.NET\测试工程师专业培训 全国就业率最高的企业定向式培训
《VC++ 2005入门经典》在线阅读
Ivor Horton的经典之作 C++最畅销书 CSDN读书频道独家连载
上一篇: 一则故事,一点感悟 | 下一篇: 回归原点
����
没有评论。
发表评论
大名:
请输入尊姓大名
网址:
校验码: 检验码无效! 看不清,换一张
评论
请输入评论
当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Powered by:
Copyright © braveroc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -