1.C++的ANSI/ISO标准化过程时间很长,直到1998年才完成。对于没能在更短的时间内完成该项工作,您感到遗憾吗?

您认为这减缓了C++的“渗透”吗(举个例子,在教育领域,许多人继续教授C语言,并声称C++还没有被标准化,这种境况真让人恼火)?

您认为这减缓了C++的进化了吗(标准库的更好的进化,对分布式计算的考虑……)?

Bjarne Stroustrup:当然了,假如C++标准能够更早地完成,情况会很好,但实际上C++标准化过程并不比其他标准来得慢。正儿八经的标准化所需的时间,要比大多数人所想象的时间长,因为要满足那么多人和组织的要求。

许多人过去 — 一些人现在 — 还这么教学:要么把C+ +当成一种非常低级的语言,集中于“和C共享”的那些特性上,或者把它当作一种表达类层次结构的语言。两种方式都没有突出C++最伟大的力量。更糟糕的 是,这些方式通常在那些“对程序员帮助不太大”的C++组成部分上花费太多的时间,而未能教授关键的技术和语言设施,以利于更有效地使用C++。标准库里 的容器和算法,以及用于资源管理的异常(exceptions)的使用,就是一些常常被忽视的“关键的主题”的例子,或被错误地认为过于“高级”。

我认为,与漫长的ISO标准化过程相比,这种教学上的失败对C++的应用所造成的伤害更大。显然,假如在1985年我们就有标准库可用的话,情况会好很多,但事实并非如此。如此一来,我们也就不知道该怎么来设计和实现一些通用、优雅和高效的东西。

听到有人说C++还没有被标准化,真让人感到悲哀。1998年ISO标准被批准,其实自1996年起,就没有向语言或标准库中添加新的重大特性了,在计算领域,这个时间可不短。

至于进化的速度,它受限于我们对问题的理解,尤其被我们的教学能力(教授“很好地使用这种语言”的能力)所限。我不认为语言能够或者应该比现在这个样子进化速度快很多。实验性的语言可以迅速演化,因为它们几乎没有什么用户,而象C++这样的主流语言,不能比它的用户社群变化得还快,“稳定压倒一切”。

2.对于C++接下来的版本,好像您更倾向于扩展标准库而不是进化语言的语法。可以解释一下您的立场吗?

您希望看到哪方面的库被标准化:多线程?分布式计算?打算走得象Java那样远吗 — 提供一个针对GUI的标准库?

Bjarne Stroustrup:我的提议是,ISO C++标准的下一次修订工作要集中于标准库上。语言已经足够强大有力,可以表达绝大多数我们要表达的东西,保持稳定则至关重要。因此,对于语言的扩充,我 们应该小心谨慎,将精力放在通用性和有助于教学的东西上,而不要添加什么大的新特性。而在另一方面,对于标准库的扩充,我们应该把握时机,积极进取。

我认为,就象“工具”之于“系统开发”一样,“库”使C++变得更好。资源管理、线程、物理上的分布式机制以及TCP/IP等,都是显而易见的候选者。我们也几乎肯定会寻找象hash_maps和模式匹配(pattern matching)这样的有意义的工具。我担心GUI对于标准委员会来说太过复杂并且是一个太易引起争议的主题。委员会由志愿者组成,我们没有足够的资源来创建一个大型GUI库。还有,标准委员会不能跟商业(和非商业)供应者竞争,它必须努力服务于整个社群。

3.Linux和开放源码社群并没有真的欢迎C++,大多数开发者依然使用C语言,有些人声称因为C语言具有性能上的优势(比如Linux内核),还有一些人“从头发明轮子”,在C语言里重新实现了一个对象层,对此,您怎么看?

您认为KDE(使用C++编写而成)的成功,以及它的开发速度,与Gnome(使用C编写而成)的迟钝的对比,例证了C++的优越之处吗?您还能给出一些别的例子吗? 

Bjarne Stroustrup:我认为“重新发明轮子”是愚蠢的行为,“过于使用C”则表明“对C++能为系统构建者提供什么”无知。这是我们领域不成熟的象征:人们抵制采用更为高级的工具,并喜欢将精力花到“使用原始工具重新发明轮子”上,而不愿意花时间来学习更具威力的工具。

4.在许多程序员的意识里,尤其是Java程序员,C++仍然是“C语言面向对象的版本”,您怎么来说服他们C++不仅如此呢? 

Bjarne Stroustrup:想去说服那些不愿意被说服的人,是很困难的。

#include<string>

#include<vector>
     #include<iostream>
     #include<algorithm>
     using namespace std;

int main()
     {
         vector<string> v;
         string s;
         while (cin>>s) v.push_back(s);          // read a file of words
         sort(v.begin(),v.end());// sort the words
         ostream_iterator<string> os(cout,"\n");
         unique_copy(v.begin(),v.end(),os);// output unique words
     }

把这个例子用C语言写一遍,再比比看,并请确保不要带来“缓冲区溢出”或“内存泄漏”问题。

5.在 对一个关于C#的问题的回答中,您说过,它是一门私有语言,用在一个私有平台上。但C#已经被ECMA标准化了,并正进入ISO标准化进程,并且,我们也 可以看到一些针对其他平台的实现品(比如Linux上的Mono)。假如有朝一日C#变成了ISO标准,您会改变主意吗?

Bjarne Stroustrup:可能不会,并且我认为那不可能。我仔细观察了标准化过程,以便了解是否真的已经有许多感兴趣的团体投入其中,并且该语言的演化不是在一家公司的掌控之下。严格意义上的标准化过程,并不仅仅是产生一纸批文。

6.C#和Java一样,采取单继承方式,这和C++不一样,后者实现了多继承。您认为多继承一向是最佳解决方案吗?

Bjarne Stroustrup:多继承并非一向都是最佳方案,但有时问题的最佳解决方案涉及多继承技术。请注意,甚至Java也包括多继承的一个受限的形式:接口的继承。有了多继承,我感到很舒服,并且在我看来,假如没有多继承的话,许多问题不能优雅地予以解决。在我的《The C++ Programming Language》一书中,此类例子超过一打。一个关键的技术是分别继承一个接口(通常是一个抽象类)和一个“部分实现品”。

你总是可以将一个使用了多继承的例子,改写为只使用单继承(通过使用转递函数(forwarding functions))。然而,结果通常是一个更冗长的、更不能直接反映设计的并且更难维护的的例子。注意,你还可以采用同样的办法,将每一个使用单继承 的例子改写为不使用继承的例子,并对代码的清晰性造成同样的负面影响。与支持多继承的语言相比,一门不支持多继承的语言,在表达能力上会有欠缺,并因此迫 使程序员时不时地编写复杂化了的代码。

7.如今人们对框架的谈论比语言更多,比方说,针对Java的J2EE,语言被牢牢地束缚于该平台上,或者.NET,微软“提升了”框架而“伤害了”语言。对于此类做法,您的观点是?C++的进化是否需要一个框架? 

Bjarne Stroustrup:关 于框架,人们谈论了很多,但是历史被“没有遂心如愿”的框架搞得乱七八糟。我看过成功的框架,但它们的应用范围通常有局限。我怀疑会不会存在“通用”框 架,尤其当这样的框架是“一个平台厂商为了同其他厂商的类似的框架竞争”而推出的产品时,我更加怀疑。作为一个用户,我倾向于尽可能地保持同厂商独立。

我希望看到“库”提供对框架更加清晰和更加通用的访问,我反对将语言紧密地系结于单一的框架。

8.在“C/C++ Journal”对您的一次访问中,您说您对C++的目标之一是提高抽象层次,这一直是您的目标吗?

您真的能实现一个强有力的抽象层而不影响性能吗(比方说,Java在性能上就作了巨大的让步)?

您希望看到哪一种机制被集成于C++之中(垃圾回收机制…)?您希望改善何种机制?

Bjarne Stroustrup:尽可能更为清晰、更加直接地将程序员的意图表达于代码之中,一向是我的目标。因此,提高抽象层次,一直是我对C++的目标。

是的,你可以显著地提高抽象层次,而不会牺牲效率。关键在于有一个富有弹性和扩展能力的静态(编译期)类型系统。标准库的STL 部分就是一个优秀的例子。例如,vector可以容纳任何类型(内建的或用户定义的)的元素,而没有什么额外负担。请注意,和Java相比,C++ vector容纳有用户定义类型的“值”,而不是用户定义类型的对象的“引用”。这既节省了内存(你无需为堆上的元素个体分配用于“引用”或“内存管理信 息”的内存),也降低了访问代价(没有“通过引用间接访问”的代价,也没有对“从vector内抽取出来”的元素进行类型检查的运行期代价)。无需在运行 期进行类型检查(转型(casting)),还带来了明显更为干净和简短的代码。另外一个例子是标准算法(比如sort),它可以用于任何相配的容器,并 可用一个“比较准则(comparison criteria)”加以参数化,并且仍然显著地比它们的C类似物(比如qsort())来得快。

我乐意看到C+ +标准委员会明白地认可垃圾回收机制是一个有效地C++实现技术,但我不希望使C++语义依赖于一个垃圾回收器。在某些应用领域(比如设备驱动和某些内核 代码),垃圾回收器并不合适。如果你希望在C++中使用垃圾回收机制,你可以使用现有的垃圾回收器之一。对于那些“自动垃圾回收是一种合理的技术”的应用 来说,它们工作得非常好。

9.您将C++描述为一种多范型的语言,主要是面向对象和泛型。在下一个版本的C++中,我们可以看到什么样的范型? 

Bjarne Stroustrup:我感觉“范型”一词被过度使用了,我宁愿使用不那么傲气的词语 — 编程风格(programming style)。而且,人们不应该忘记使用简单的“独立类”(也就是那些不属于某个层次结构中的一个组成部分的类)。对于许多现代C++技术来说,它们至关重要,富有弹性且高效,并且也是经典的“数据抽象”的例子。

我不认为C++将很快支持一种新的“范型”,也可能在“什么叫范型”方面,我过于保守了。我希望下一个C++标准将支持分布式编程,但这首先要通过标准库达成。

10.您有计划将AOP(Aspect Oriented Programming)集成进来吗?

Bjarne Stroustrup: 没有。我仍然没有搞清楚AOP是怎么符合我的指导原则的 — 在代码中独立地表达独立概念,并且当(且仅当)需要时,可以自由地将它们结合起来。我也不清楚它有多么通用,以及它的概念有多么普遍的意义。记住,只有当你通盘考虑了备选方案后,你才可以向一门被广泛使用的大型程序语言中加入新的特性。

请注意,在我的主页上可以找到许多C++ FAQ和相应的答案。在那儿,你还可以找到许多文章,以及一些有用的C++链接。

转载于:https://www.cnblogs.com/userinterface/archive/2005/04/05/132550.html

Developpeur Reference对Bjarne Stroustrup的采访(转载)相关推荐

  1. Slashdot对Bjarne Stroustrup的采访

    注:前段时间Myan在CSDN上贴了一个对各大语言,以及OO和模块化的评价的文章.下面这篇对C++之父的采访中,Bjarne Stroustrup谈到了自己的看法.通过大师们思维的碰撞,我们能从中学到 ...

  2. 转载:Bjarne Stroustrup百科

    编辑本段B. S在自己主页上发表的FAQ 1. 请谈谈C++书. 没有,也不可能有一本书对于所有人来说都是最好的.不过对于那些真正的程序员来说,如果他喜欢从"经典风格"的书中间学习 ...

  3. C++语言之父 Bjarne Stroustrup 简介

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105112513 B ...

  4. C++之父Bjarne Stroustrup:程序员在数学上付出的努力,永远也不会白费

    [CSDN 编者按]1979年诞生的C++已迈入"不惑之年",如今却依旧在主流编程语言中占据重要一席.但今天,我们不再赘言C++的成功史,而将目光转向C++背后的英雄--C++之父 ...

  5. 摘录的一些Bjarne Stroustrup关于C++的谈话内容

    1 专访 Bjarne Stroustrup 2 C++ 热点问题一席谈 3 C++0x 热点问题访谈 4 C++0x 概览 专访 Bjarne Stroustrup 来源:荣耀 马皓明 译 作者:B ...

  6. Bjarne Stroustrup语录[C++经验]

    摘录自Bjarne Stroustrup 的<The C++ Programming Language>(Special Edition) 一.致读者 1.  在编程序时,你是在为你针对某 ...

  7. Learning Standard C++ as a New Language ( By Bjarne Stroustrup )

    来源:http://blog.csdn.net/smonster/article/details/435489 将标准 C++ 视为一个新语言 Learning Standard C++ as a N ...

  8. 反弹和补遗:再论Bjarne Stroustrup的基于对象的含义

    引用 在The C++ Programming Language 3rd (Bjarne Stroustrup, 1997)里: 第9页: Objects of some user-defined t ...

  9. C++ 之父 Bjarne Stroustrup : 简单的表述方式才是最优的方案

    2016 年的最后一天,图灵访谈给各位小伙伴儿献上特大彩蛋!借用 Bjarne 大师的话"趁你还足够年轻的时候,喜欢上某些学科,选择具有挑战性和感兴趣的工作并养成良好的习惯!",预 ...

最新文章

  1. 解压文件出错解决方法(invalid compressed data--format violated)
  2. python抢红包脚本实例-这个Python脚本牛逼了,秒抢红包,再不怕错过一个亿了!...
  3. mybatis判断集合为空或者元素个数为零
  4. 原声JS面向对象实现的简单轮播
  5. 南瓜电影将和腾讯合作 获海量视频版权授权
  6. GitHub 回应突然断供:身不由己,无权提前通知预警
  7. linux命令last格式,Linux last和lastlog命令:查看过去登陆的用户信息
  8. win10下编译GANet
  9. 计算机构成教学反思,计算机教学反思
  10. 【算法】高精度(加减乘除)包含高精度*高精度高精度/高精度
  11. sql查询查询半小时内数据的方法
  12. SQL优化不会?推荐4 款工具
  13. 空指针-Base on windows Writeup -- 最新版DZ3.4实战渗透
  14. 软件设计师(程序设计语言)
  15. 前端—基于Flask框架调用百度接口实现语音识别功能(使用蓝图blueprint)
  16. wbe自动化测试----xpath定位与CSS定位
  17. 安徽理工大学计算机创新大赛,2017年安徽理工大学大学生机械创新设计大赛决赛成功举办...
  18. 用c语言泰勒公式求sin30,用泰勒公式求sin(x)的近似值
  19. Android 源码开发系列(二)Android SIM/USIM
  20. VLC SDK下载路径

热门文章

  1. html里p标签里面如何让首行缩进两格?
  2. sql语句,如何找出重复的数据
  3. 公交来了 1.3.0 发布
  4. 【Linux】VMware使用 - 虚拟机克隆
  5. Git安装、配置和使用
  6. linux下设置MySQL密码
  7. 后缀是lnk是什么文件_后缀lnk是什么文件格式(lnk文件怎么恢复word)
  8. 校招经验 | 三无菜鸡水硕如何拿到多个高薪offer?
  9. AWS KVS(Kinesis Video Streams)之WebRTC的C库测试
  10. 计算机操作系统--Linux初试05