荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: tang (独孤九剑〖玄铁重剑〗), 信区: Program
标  题: [转载] B.Stroucstrup言论(3)(转寄)
发信站: BBS 荔园晨风站 (Sun Feb  4 18:07:11 2001), 站内信件

【 以下文字转载自 tang 的信箱 】
【 原文由 tang.bbs@smth.org 所发表 】
发信人: immy (smilewolf), 信区: Programming
标  题: B.Stroucstrup言论(3)
发信站: BBS 水木清华站 (Sun Feb  4 17:25:24 2001) WWW-POST

18. 显然,这几年世界变了,正在走向一个以Web为中心、分布式计算为主流的时代。那
么您觉得C++还能维持其地位吗?程序员们可不可能把若干种专用语言(比如Perl、
Javascript)综合运用以彻底取代某一种通用语言?(C++就是这样的通用语言——译者
)为了配合新的计算模式,C++及其标准库应该做怎样的调整?
从来没有哪一种语言能适合所有的工作,我恐怕以后也不会有。实际系统通常是用多种语
言和工具构造起来的。C++只是想成为若干语言和工具中的一个,当某些专用语言在其领
域里特别突出时,它们可以与C++互为补充。也就是说,我觉得如果大多数现在的专用语
言能借助特定领域的C++库共同工作的话,它们会表现得更出色。脚本语言通常导致难以
维护的代码,而且也没有给程序的结构、可扩展性和可维护性的优化留下什么余地。
我不敢肯定未来的代码是否真的会是以Web为中心的。就算是直接处理Web的系统也主要是
由处理本地资源,如IP连接之类的程序模块构成的。
地理上的分布性以及服务器软件对于并发机制的高度依赖对于系统的建造者来说的确是个
挑战。有些针对上述问题的库已经出现,也许我们将会看到它们最终得以标准化。当然,
一些原操作和保证规则应该被加到核心语言中以提供对这些库的更佳支持。
总的来说,对于Web和网络,我们非常需要一个真正的系统/网络级的安全模型。指望
JavaScript之类的脚本语言实现这个模型无异于白日做梦。注意,我也没说C++提供了这
个问题的解决方式。C++的重心是高效的访问系统资源,而不是反欺诈。

19. 您看C++未来的走向如何?在接下来的10年里它会衰落吗?或者是基本保持现在的形
式?或者发展变化呈不同的形式?
C++有着最美好的未来。用它你能写出伟大的代码。除了故意进行恶意欺诈,C++仍将是开
发高性能、高复杂度系统的最好语言。据我所知,没有那种语言能在通用性、效率和精致
三方面的统一上可与C++相题并论。
我没看到C++有衰落的征兆。在我能预见的未来里,它的用途还会不断增长。当然,在未
来的十年里我们会看到一些变化,但不会像你想得那么显著。跟每一种语言一样,C++也
会发展变化。“语言专家们”要求改进的喧嚣声震耳欲聋,但是系统开发者们的基本请求
是保持稳定。
C++会改进,但是这些改进将主要是为了反映从实践中得来的经验教训,而不会是为了追
风尚赶时髦。为了更高效地使用一些新的编程技术,比如通用编程技术,可能会增加一些
小的特性。会有大量的库涌现,我预期会出现一种崭新的、更出色的库支持机制。我希望
新的扩展主要集中在支持抽象方面的一般特性,而不是为支持某些特殊任务的特定机制。

例如,“属性”这个概念是很有用的,但我不认为在一种通用编程语言中有它的容身之地
。用标准C++的一组类可以很容易地支持这一概念。如果我们感觉那族类对于“属性”这
一概念的支持不尽如人意,也不会立刻跑去在语言里增加属性机制,而是仔细考虑如何改
进类和模板以帮助库设计人员尽可能接近“属性”这个概念。也许通过改进函数对象的机
制能够给这个问题一个满意的答复。
为了使C++在接下来的十几年中保持灵活可变,很基本的一点就是不要让标准C++赶什么学
术或者商业的时髦。人们要求增加的特性中很大一部分通过使用现有的标准C++开发新库
的方式都可以实现。还有,事实上人们渴望得到的很多特性已经被包括在标准C++中,并
且被最新的编译器支持。对许多程序员来说,提高代码质量的最佳途径不是追求什么语言
扩展,而是好好地、慢慢地品味最新的C++技术书籍(可惜我们到目前为止连这种机会都
没有——译者)。

20. 您怎么看待脚本语言的兴旺态势?特别是Python,似乎提供了一种学习OO技术的更简
单的途径
有些语言很不错。比如Python,我很喜欢。但是我认为你从不同的语言中学到的OO技术是
不完全相同的。当然,每一个专业的程序员都需要通晓几门语言,并且了解各种语言在编
程和设计技术上的不同。
在我看来,用脚本语言建造的系统与用C++那样的通用语言建造的系统大不相同。从两类
语言中学到的技术区别明显。在OO技术里也不存在什么通用部分对于各种系统的高效建造
来说都是至关重要的。

21. 有没有计划往标准C++里增加一些新的特性以支持分布式计算?
没有,我也不认为有这个必要。用更好的库就差不多能解决问题了。最多,为了支持这类
的库,我们可能会增加一些低级的原操作和规则

22. 未来C++有没有可能定一个可移植的二进制接口?
如果你说的“可移植”是指跨硬件和块操作系统的可移植,我想回答是不会。我们当然可
以设计一个解释器或者虚拟机(如同Java的做法——译者),但这样一来,由于无法以最
优的方式访问系统资源,C++的能力就会受到削弱,。我真正希望在不远的将来能够看见
的东西是platform ABIs(ABI, Application Binary Interface) 。例如,有人正在努
力为Intel新的IA64体系定义C++ ABI,我想这些努力会得到用户们的巨大支持。
能够把不同编译器产生的代码编译在一起将会是一项十分有意义的事情。

23. 在不少流行领域,C++正在渐渐失去光芒,因为它要求人们花很大的精力去对付一些
很基本的工作,比如管理内存(因为没有垃圾收集机制),管理模块之间的依赖性(因为
没有包机制),管理组件的版本。C++缺乏一些现代语言已经视为标准的特性。比如传言
中最酷的Java语言就特别重视这些问题。那么在解决这些问题是否会导致C++的发展背离
其根本宗旨呢?C++应该怎样发展以保证我们在这种语言上的投资能有合理的回报,而不
是被迫去重新使用另一种语言?
我倒还没有注意到C++比以前用的少了。相反,我看到的指标表明C+的使用还在稳定地增
长着。只不过这种基数很大的稳定增长以及在标准性、移植性和库方面的不断提高并没有
造成什么具有欺骗性的新闻效应而已。我认为你所说的“失去光芒”只不过是市场推销和
新闻意义上的现象。
如果你需要垃圾收集机制的话,你可以在C++应用程序中插入一个垃圾收集器。有不少自
由的和商业的垃圾收集器已经在重要的实践中被证明是很出色的。
如果你不想使用垃圾收集机制,也没关系。你可以使用标准容器类,它们大大减少了对于
显式分配和回收内存的需要。这样,使用现代的库和现代的编程风格,你能够避免大部分
的内存管理问题。
同样的技术还能够用来避免一般资源的管理问题。并不是只有内存才会泄漏,线程句柄、
文件、互斥锁、网络连接等都是重要的资源,为了建立可靠的系统,这些资源必须被正确
的管理。如果你觉得有了垃圾收集机制就可以解决所有的资源管理问题,那么你最好赶快
从美梦中醒来。
C++提供了很多机制来管理一般性的资源。关键的手段——“获取资源就是初始化”——
可以使用函数对象来管理生存期问题。语言中关于对象的局部构造和异常机制对这项技术
提供了支持。
某些语言的狂热支持者总是用讽刺漫画的笔法描述C++,然而C++实际上要好得多。特别是
我觉得很多其他的特性已经泛滥不堪了,在C++中,通常这些特性能够很容易的被模拟出
来。相反的,新的语言在推广的过程中总是不断地增加新的特性,这就是为什么从一种语
言诞生到被广泛使用,其体积通常会增加个两三倍。
目前,最为个人和组织,对于C++的最好投资就是去更好地理解标准C++和现代的C++设计
编程技术。大多数人使用C++的方式实际上停留80年代中期的水平,甚至比那更陈旧。
至于模块依赖性问题,我的观点是,在编程语言的工作和系统的工作之间应该有一个明显
的界线,依赖关系应该尽可能地与编程语言分开,而由系统来支持。
我不认为组建版本的问题应该由编程语言来解决,这是一个系统范畴里的问题,在语言里
应该通过提供相应的库来解决。C++有这样的机制。解决这样的问题不会使C++偏离轨道。
但是给C++增加很多特殊的特性就会使C++偏离轨道,而且在保持可移植性和平台独立性方
面也会是一个倒退。

24. 标准C++推出有段时间了,Java也大踏步地往前走而且取得了显著的进步,您现在怎
么比较Java与C++?您觉得Java想要变成像C++一样“好”的语言还需要做些什么?您举的
C++从Java身上学到了什么经验吗?有没有什么Java的特性您认为是可以被C++吸纳的?
我不比较语言。做好这项工作是十分困难的,而且很少具有专业水准。
我认为C++的进步会是主要以它的用户在使用中遇到的问题以及其自身逻辑为基础。当然
,其他语言中的某些思想也会被考虑,但不能被简单的移花接木过来。你必须审视那些机
制在技术上和思想上的背景,并且找到在C++中支持这些技术的最佳方案。
有时最好的选择是综合使用几种语言。毕竟没有任何一种语言是放之四海而皆优的。C++
现在是,将来也继续会是在广泛应用领域中最好的语言之一。但是,我们不能被拉下水,
不能把所有可能的特性都加到C++里面来向大众献媚。我认为Java和C++现在和将来都会是
十分不同的语言,语法相似,但背后的对象模型明显不同。
对于我来说,一个很重要的区别是C++有一个ISO标准,而Java则是一个专有语言。

25. 在Java刚刚出现的那几年,有很多欺骗性的言论说它将会是终极语言,会取代C++。
您觉得在过去两三年里Java对C++的追随者们有什么影响?
到现在关于Java的不实之辞也还随处可见。暂且不提Java在过去5年间的创纪录的发展,
狂热的大众似乎认为Java将最终取代的不仅仅是C++,而且还有所有其他的编程语言。但
在另一方面,C++的使用仍在继续增长。我不认为Java对于C++的影响已经使得人们转而把
本来打算用来创造更好的C++工具库的资源调过去开发Java工具库。Java对于学习编程的
人来说没有太多的新东西,所以对于C++的定义也没什么影响。在那个领域,Java还得努
力追赶。例如,我认为为Sun迟早会往Java里加入类似模板的机制。
人们应该认识到C++和Java的目标是何等的不同。 以C++的设计理念来衡量Java,或是以
Java的设计理念来衡量C++,得出的结论都不会很好。
在访谈即将结束时,或许我该再次表明态度:C++仍然是我喜爱的语言,在写代码时你会
发现没有那种语言能像它那样在如此广泛的应用领域和平台上同时达成如此的高效与精致



--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.114.80.102]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 166.111.215.107]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店