BS_CPUMagazine对Bjarne Stroustrup的专访 荣耀 蒋贤哲 译 通常情况下,假如你看到了一个成功的产品或标准,那就会有一个“幕后设备”至少为其做部分支撑。丹麦程序设计师Bjarne Stroustrup于80年代早期在AT&T设计的C++编程语言就是这些幕后设备之一。在过去的20多年间,C++是许多科技和计算进步以及产品的驱动力。Stroustrup如今依然是AT&T实验室计算机科学家,同时还是大规模程序设计研究部门的负责人,最近他和CPU谈论了C++编程语言的若干方面。(译注:Stroustrup如今已经受聘为Texas大学教授,不过AT&T仍然保留了他的位置) Q:在剑桥大学取得计算机科学博士学位之后,您是把设计一种像C++这样的编程语言作为目标,还是另有其他目标? Stroustrup:我的目标是关于构建分布式操作系统的,C++则被设计为实现该项目标的一种工具。 Q:是什么激发您设计C++呢?随着语言的演化,这些思想是否仍有意义? Stroustrup:我对C++的主要目标是能够在代码中直接表达思想,并且使之以接近最优的性能运行。换句话说,就是可以写出既优雅又高效的程序。如今这依然是我的目标,在我感兴趣的许多领域,C++都可以使我做到这一点。特别要提到的一点是,我仍然在实验分布式系统。 Q:最近关于C和C++的变化好像正在促使这两门语言进一步分离,这是件好事吗?或者您希望看到这两门语言走得越来越近? Stroustrup:我希望这两门语言能够合为一体。我看不出有什么哲学上的原因不这么做。对于使用户社群消除不兼容方面,我看到许多实实在在的便利。尽管这种合并在技术上有一定难度,但我认为在技术上是可行的。至于在政治上是否可行则是另外一回事。可能有人会反对我这个回答中的各个声明,我很快就会将一篇探讨C和C++之间关系的论文摆到我的主页[www.research.att.com/~bs/homepage.html]上。 Q:您认为C++为什么现在还能如此流行?在创建C++之后,您可曾料想到20年后还在继续讨论这门语言? Stroustrup:C++有着惊人的表达能力,许多人也的确知道该如何运用它。当今很多计算、通信和商业应用的基础设施都是C++。例如,Google、Internet Explorer、Photoshop以及电话系统的关键组成部分。这自有其原因,但并不是因为C++像一门具有很强市场营销力度的私有语言那样占据了什么“有利位置”。在设计C++时,我只是想着如何让它如尽我所能得好,并教给那些愿意来听、来读的人。我无暇他顾。假如我果真考虑过你所说的问题,我想我会认为20年内每一个人都已经理解了C++的原理、功能和技术,因此也就不需要我来谈论C++了。果真是那样的话,那我就大错特错了。 Q:大家都想知道如果您重新设计C++的话,您将会做出什么不同的处理。不过我想知道的是,在最初的C++设计中,您认为哪些特性特别优秀、成功,以至于您永远都不会改动它们? Stroustrup:他们当然都想知道()。C++专注于类。类用于表达概念。为了更好地做到这一点,C++类是一种具有很强的通用性和灵活性的构件。我的想法是使定义和使用类的设施具有很强的通用性和灵活性,从而避免再引入一种专用设施。因而在C++中,vector是一个类,list是一个类,string是一个类,资源句柄可以是一个类,线程也可以设计成一个类,等等。其他语言提供了内建设施,而C++则依靠用户自定义的类。C++标准库就是用标准C++编写而成。我认为出于对通用、灵活的类(s)的需求,从而出现了类层次结构和参数化的类。如果让我来设计另外一门语言的话 — 这不大可能,我将会强化这一观点。更为重要的是,在即将来临的C++修订工作中,我将会使这一观点占据中心位置。 Q:在过去那些年里,C++最重要的变化是什么? Stroustrup:增加了模板。参数化的容器的概念是我最初关于一门支持抽象的语言的观念一个组成部分,但直到1988年左右我才知道如何将其设计得足够灵活、足够高效。该领域中的改进依然在继续,泛型编程是C++最具活力的试验领域之一。 Q:您是否认为C++有点被误解了?虽然C++是最广为使用的语言,但看来人们对一些可以理解的不足之处吹毛求疵?这是否例证了其他开发者正企图击倒这个“山中之王”? Stroustrup:那只是部分答案,我并不认为那是问题关键之所在。有太多的程序员被以一种遗漏掉了C++中最有效的特性和设施的方式而教导。举个例子,最近我听说一所大学里的C++班级采用的C++教材的前500页都是在介绍C,只是到了最后的100页才举了一点类的例子。这里面没有标准库的用法,没有模板的用法,也没有异常机制的用法。基本上,呈现给那些可怜的学生的,不过是一个C程序员在末尾添加上一些“作为所谓的高级素材”的半生不熟的C++内容。这样的课程培养出来的学生成为一名称职的C++程序员的可能性微乎其微。如果这就是C++,我也会抱怨不迭。一些偏重于商业编程环境的C++教学方式存在类似的问题。 从一个荒诞的观点来看,这倒也是一件好事,因为无需变更语言或使用昂贵的新工具就可以让人们从C++中获得更好的结果。我乐意鼓励那些还没有瞧过标准库的人去欣赏一下它所采用的技术。我也希望人们去看看异常处理机制。假如有人最近一次看C++是5年前或10年前的事了,那他将会注意到许多方面已经发生了变化 — 变得更好 — 我认为。 对于那些认为C++“只是一个更好的C”的人,我建议去读一读“把标准C++当作一门新语言学习”,可以到我的publications网页下载这篇文章。在那里你还可以看到其他一些关于C++的论文。大体上,我的主页包含了相当数量的C++信息以及到更多的C++站点的链接。例如,你可以看到作为《The C++ Programming Language》附录的“Standard Library Exception Handling”,它甚至可以使专家确信C++异常处理机制并非仅仅是一些基本语言成分。该附录包含了编程技巧和标准库异常安全。凭借标准库和适量高级特性,C++实际上更加易学易用。 Q:您过去曾经说过不喜欢私有语言,您能解释一下让语言掌握于一个民主的标准团体手中的优势所在吗? Stroustrup:私有语言一般都被设计为迎合语言所有者的大部分客户的需求或语言所有者希望作为客户的大部分人的需求。私有语言倾向于对这样的客户阿谀奉承。这些客户一般都是些管理者和行政人员,他们首要的兴趣并不在编程上,同时一个公司真正想卖的东西通常也不是编程语言。比方说,一个公司可以从硬件或操作系统的销售中获取利润。语言的拥有者还可能为了取悦大多数客户而抵制不住做一些不兼容的修改的诱惑,并且强迫用户进行升级。每一种语言的所有者都试图利用不能在可选供应商的硬件和(或)操作系统上运行的功能来锁定用户。一个正式的标准为避免这种状况的发生提供了最低限度的保护。 像ISO C++委员会这样的民主的标准团体具有另外一些问题,但不是刚才所述的问题。从概念上讲,ISO标准团体必须兼顾每一个人的想法。只要委员会与其用户和供应商社群紧密联系,所得结果将对几乎每一个人而不是一小撮人足够好。对我而言,C++标准化过程中一个非常重要的方面就是它没有被“为虚构的‘普通用户’而考虑”所支配。在过去的那些年里,许多开发者提出了一些非同寻常的需求和要求。一门语言必须有意识地受到一些限制,以免一些可以察觉的误用挡住其发展道路。如果你愿意,你可以将这个观点看作是我为一家公司工作的结果 — 这家公司比其他大部分公司更关注规模、性能和可靠性。 Q:您目前有多少时间被花在C++上,比如对其进行修订,检视它的演化,或只是简单地维护它? 您对C++工作可曾厌倦过?或是它仍然让人感兴趣? Stroustrup:我花费我三分之一到一半的时间用来查看标准议题、回复和C++有关的电子邮件、做有关C++的报告,等等。其余时间用来参加公司活动和研究,通常这些活动也包含有关C++的内容。我的确对C++的某些方面感到厌倦,但是新的机会和挑战也不断涌现,而且可以与许多有意思的人交流。 目前,C++标准化过程正处于一个关键阶段。ISO标准快要五岁了,我们需要面向未来,准备进行一次修订。在这次被称为C++0x修订的计划中我担任关键角色。我是进化工作组主席,该工作组将会制定C++的发展方向,而且最终会做许多关于语言新特性方面的工作。我个人的首要目标是使C++成为一门更适合于系统编程和编写库的语言,并且更加易教易学。为了做到这一点,同时为了兼顾广大用户社群的稳定性,我建议语言的演变应当是有节制的、稳妥的和最低限度的,而对标准库的扩充则要把握机会、积极进取。我希望这些目标和策略能够带来显著更好的语言。 Q:近几年来,您感兴趣的其他项目有哪些? Stroustrup:目前,我的个人研究涉及一个用于试验搜索树和搜索树算法的框架以及一个支持C++程序转换的库 — 首先瞄准于对分布式程序设计提供更好的支持。 |
评论