Bjarne Stroustrup
C++语言创建者Bjarne Stroustrup博士访谈
荣耀 刘瑶 潘梦 译
(Crazy)计算机工程师都会赞同我们生活在“面向对象世界”中。各位中的大多数都是通过C++编程语言认识对象世界的。CE很荣幸邀请到C++语言的创造者Bjarne Stroustrup博士。Stroustrup博士回答了由CEans提出的问题。下面是我们和Stroustrup博士的交流记录。
CEan – KGV:是什么促使您超越C去寻求一个面向对象的C++呢?
Dr. Stroustrup:我有一些问题(并发和分布式编程领域的问题)最好能用今天所谓的面向对象方法解决。不幸的是,当时没有哪一种语言能够编写硬件上下文或接近硬件的面向对象风格的代码。所以我将面向对象的关键思想从Simula(第一个面向对象的语言)移植到了C中。
CEan – Elisa:在设计一种新语言的过程中遇到的最大挑战是什么?
Dr. Stroustrup:让别人在实际应用中使用它。很多新出现的编程语言在尝试玩具性的例子和解决受控环境中的程式化问题方面花费了很多年的时间。这恰好表明C++在很大程度上受益于其早期的工作。虽然它不是我能设计的最精致的语言,但它远比“更容易受到欢迎的精致语言”有用。
CEan – Crook:假如重新设计C++,您会对它做出哪些改变?
Dr. Stroustrup:理所当然,我们永远都不可能从头再来,但是我们可作如下设想:没有从数组到指针的隐式转换,没有隐式地窄转换(译注:例如从int到double的隐式转换),一套用于内建类型和用户自定义类型的重载决议规则,没有乱七八糟的声明符语法。我们仍然能够不用垃圾收集器编写代码(通过使用构造器和析构器),但会存在完备的类型安全机制以及某种形式的可选的垃圾收集器。类、类层次结构和模板的整合将更加干净利落。我是在设想一种系统编程(包括嵌入式系统编程)语言,因为这是我所喜欢的,也是我有所了解的。
CEan – Suyash:当我开始学习C和C++的时候,我就被告知这些语言在操作系统设计领域的重要性。请问它们在现代操作系统的创建中所处的境况如何?
Dr. Stroustrup: 很多操作系统以及一些操作系统的部分都是用C++编写的,例如IBM的很多软件、Chronos(实时的)、 Choices(学术的)、 Bea(媒体的)以及部分Windows,等等。在我看来,在这个领域之所以C仍占主导地位,部分是因为惯性(惰性),部分是因为老家伙们太不愿意学习新技术。在接近硬件的编程的上下文中(例如设备驱动程序和OS核心),我们必须认识到,C++并不仅仅是一种面向对象的语言,而且并非所有东西都适合用类层次结构进行表达。
CEan – Kidakaka:请问您在OOP之后又看到些什么呢?
Dr. Stroustrup:这很难预测,不过我希望能找到一种更平滑且更有效的整合使用面向对象和泛型编程的技术。
CEan – Kidakaka:C++已经发展了一段时日,已经导致一些其他语言(例如Java、C#等)的出现,我们可以不太严格地称之为“C++的后裔“。您认为这些语言中存在的糟糕的设计决策是什么(如果您愿意,不妨列举多个)?
Dr. Stroustrup:创造编程语言的目的是为了解决问题,而那些编程语言并不是用来解决我的问题的,所以,如果我对Java和C#的设计发表太多的批评之辞,必然是不公正的。我非常喜爱可移植、接近硬件编程和非私有的语言。JAVA、C#以及大多数流行的脚本语言都有很大的反响,但这并不重要,因为我的理念与之不同。当然,我也并不认为我们应该梦想一个无所不能的语言,每一个人都应该使用它完成所有的事情。然而,我理想中的语言绝非私有的,而且也不需要半G的运行时支持。能够将一个Circles容器转换为一个Shapes容器也是违反恰当的类型规则的。我还认为新语言完全可以有自己的语法,而不是秉承C和C++的先例。换句话说,这些语言在各自的应用领域中非常有用,且其设计目的也正在于此。
CEan – Kidakaka:很多工程院校先教C再教C++,但我发现C++反而比较容易学习。那么对于那些初学编程的人来说,C是否可以从“第一门语言”的位置被淘汰掉呢?
Dr. Stroustrup:是的,C++应该比C更先被教学。C++提供的更好的符号支持和类型检测使用户更容易理解基本的编程问题和原则,所提供的支持性的库类型(例如vector和string)的价值也无法估量。这也是我教初学者编程的方式。C如果在这之后教或学会容易得多。
CEan – Maro:人类有一天会创造出一种东西来代替冯·诺依曼架构吗?即设计关于单个数字位的新标准。
Dr. Stroustrup:这就要看你如何定义冯诺依曼架构了。对于多核以及静态和动态的指令排序,我们已经背离了冯诺依曼所认识的任何东西了。重新排序使得传统的机器更加接近于数据流机器。因为多核和多级缓存,我们对于基础语义学的定义需要远比以前的精确。在设计C++OX过程中,一个主要的努力就是直接解决这些难题,该项工作成果在很大程度上要归功于HP的Hans Boehm。
CEan – Kidakaka:看到有这么多的人在使用C++,作为它的创造者,您有何感想?
Dr. Stroustrup:恐慌但又非常满足。满足是因为看见我和我的朋友们的思想(在C++以及其他语言中)兴旺繁荣。恐慌是因为有很多关于这些思想的一知半解。很开心看见C++能够被用于科学工作中,例如火星探测器以及人类基因组的排序。也很开心看到C++被广泛用于日常的玩物和工具中,如iPod和Google。如果想了解我关于C++的一些想法,可以阅读我的论文“Evolving a language in and for the real world: C++ 1991-2006. ACM HOPL-III. June 2007.”。这是一篇经过同僚复审的论文,而非销售广告。
CEan – Ruhi:C++之后是什么呢?
Dr. Stroustrup:我可以梦想超越C++,但在很长时间内C++仍将是我的主要工具。首先我需要协助完成C++Ox标准化工作,并完成一本针对初学者的教科书(当然是使用C++)。你不能纯粹是为了超越而硬生生地创建一些新东西出来。之所以设计和构建某物,是因为存在对它的需求,至少在我看来如此。
CEan – The Big K:先生,感谢您于百忙之中抽空与CE交流,请问您对Crazy Engineers有何寄言?
Dr. Stroustrup:在实现梦想的过程中既要有野心又要现实。做一些有积极作用的事情。不要被那些唱反调的人所影响。
CrazyEngineers非常感谢Stroustrup博士抽时间与我们交流。欢迎大家访问Stroustrup博士的网站,并在CE论坛上就本文发表评论。
-完-