📄 vc++网址.txt
字号:
a:是的,我接到了很多厂家的电话。borland公司的peter becker出的力特别大。他帮助我实现了对应borland编译器的所有内存模式的allocator组件。symantec打算为他们的macintosh编译器提供一个stl实现。edison设计集团也很有帮助。我们从大多数编译器厂商都得到了帮助。
(译者注:以目前的stl版本来看,最出色的无疑是sgi*stl和ibm stl for as/390,所有windows下的的stl实现都不令人满意。根据测试数据,windows下最好的stl运行在piii 500mhz上的速度远远落后与在250mhz sgi工作站(irix操作系统)上运行的sgi*stl。以我个人经验,linux也是运行stl的极佳平台。而在windows的stl实现中,又以borland c++builder的rogue wave stl为最差,其效率甚至低于jit执行方式下的java2。visual c++中的stl是著名大师p. j. plauger的个人作品,性能较好,但其queue组件效率很差,慎用)
q:stl包括了对ms-dos的16位内存模式编译器的支持,不过当前的重点显然是在32位上线性内存模式(flat model)的操作系统和编译器上。您觉得这种面向内存模式的方案以后还会有效吗?
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月
链接:http://blog.csdn.net/oyljerry/archive/2004/11/19/187033.aspx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -