Biltek对Bjarne Stroustrup的专访 荣耀 马皓明 译 Biltek:C++最初的设计与实现是基于什么样的思想?这些思想仍然新鲜有效吗? Bjarne Stroustrup:最初的想法是创造一门“允许既优雅又高效地编程”的语言。显而易见,这种思想仍然象往常那样具有重要意义。最近大肆宣传的那些语言似乎都不适合用来构建大型系统。 我采取的特别方法 — 将Simula语言“类”的概念添加到C中,同时改进静态类型检查功能,都不过是开端而已,最近的一些改进,比如模板(templates)和异常(exceptions),使得C++编程与“仅仅使用它初期的特性集所能做到的”相比,更加接近于我最初的理想。ISO标准C++比以前版本的C++更加接近我的理想,标准库则提供了大量的范例,展示了C++的表达威力。我期望C++标准库和更多专门的库能有大的进步,请参阅我的C++网页上的链结。 重要的是,我们已经看到C++提供的系统构建技术也有长足的进步,例如使用模板技术的泛型编程,以及使用构造器和析构器而达成的“异常安全(exception-safe)”的资源管理。 Biltek:C社群对C++有什么反应?C++是否具有普遍的适用性,多数C++程序员从一开始学的就是C++吗? Bjarne Stroustrup:形形色色的反应都有。有的奔向C++,就好比鸭子看见了水;有的懵懵懂懂,把他们第一次碰到的风格当成唯一正确的风格;有的则强烈反对C++的“复杂”功能 — 他们通常会错过这些功能所支持的编程风格和技术。 我怀疑大多数C++程序员还是先从C开始学起的,但如今这只是错误的教学方针所导致的结果。C++无疑是比C更好的“第一门语言”,别的原因都不谈,C++有着更严格的类型检查机制和更棒的标准库。如需更详细的论据,请参阅《把标准C++当作一门新语言来学习》,可到我的个人主页下载这篇文章。 Biltek:您认为C++错过了Web吗? Bjarne Stroustrup:可不可以说成“Web错过了C++”?在向市场推销新型商业应用的急流中,优秀的可伸缩的系统设计常常被忽视了。我认为,正如对于其他任何大型系统一样,C++在Web基础设施的开发方面,也起着广泛的作用。 还有,你的浏览器是用什么语言编写的?当然是C++,几乎总是如此。 Biltek:在八十年代和九十年代,C++最重要的里程碑是什么?您对这个十年可能发生的大事有什么预测? Bjarne Stroustrup:八十年代最重要的事件,无疑是我最初C++编译器的第一个商业版本的发布,以及TC++PL(The C++ Programming Language)第一版的出版。它们发生于同一天 — 1985年10月14日。 我想九十年代最重要的里程碑是成为ISO标准(1997年投票认可,1998年批准通过)以及1997年TC++PL第三版的出版。 我撷取以上成对发生的事件,是为了强调将“语言特性”和“需加以支持的编程技术”进行匹配的重要性。 我猜测,21世纪最初10年的关键大事,将是ISO C++标准的0x修订版的发布。我预测(也希望)它将包含主要的新标准库,但语言不会有大的改变。我希望看到在如下方面得到标准化的支持:并发(concurrency)、资源管理(resource management)和模式匹配(pattern matching),等等。我可能有必要写一本TC++PL第四版以与之相配,但C++0x版的出现还需等上好几年,在“理解语言提供的功能”以及“用好标准C++所需掌握的技能”两方面,C++社群仍要跟上1998年标准。 Biltek:Java和C#已被促销为C++的替代者,从技术的角度和现状来看,您认为Java和C#能够成为C++的“替代者”吗? Bjarne Stroustrup:C++已经成为占据支配地位的通用编程语言,这就意味着任何新语言都必须以“C++替代者”这一噱头来促销。 我不是专有编程语言的爱好者,我也不欣赏“将一门编程语言与一个专有系统架构紧密结合在一起”的主意。我认为那些大肆宣传“简单”的语言是下面几个因素的结果:未臻完善;将重点集中于初学者身上而忽视了富有经验的系统构建者;将重点集中于小型程序而忽视了大型系统。 也就是说,那些不像我一样担心“被厂商套牢”的人们,还有那些不像我一样对软件有“规模”和“性能”方面要求的人们,可以从一门约束更多的语言中(其中,某些常见应用得到了更直接的支持)得到某些好处。 Biltek:最新的标准已经在多大程度上渗透到在现实世界中了(包括编译器、程序员的使用情况等等)? Bjarne Stroustrup:对我来说,最近的一些C++实现已经足够接近标准,它们都可使用最新的、依赖于“异常”和“模板”的C++编程技术。我们还可以获得“跨越不同编译器和系统”的优良移植能力。 我看到许多程序员正向先进、高产的C++风格(依靠标准库和其他基于模板的库)转移。当然了,并非所有人都注意到C++因之“标准及其支持的编程技术”而确实发生了变化。很多程序员仍然固守着陈旧(而且低产)的观点 — C++“不过是一种更好的C”,或是“一门使用类层次结构的面向对象编程语言”。然而,这种情况正在改变。随着时间的推移,更多的程序员开始掌握泛型编程技术、“异常”的使用以及“多范型编程(综合应用“面向对象”和“泛型编程”等范型的技术进行编程)”。 对于不同的用户社群来说,这些技术的渗透程度有较大的区别。一些新教材,比如TC++PL3(The C++ Programming Language 第三版)以及Koenig和Moo合著的《Accelerated C++》,将有助于改变这一现状。 Biltek:您认为图形用户界面工具(GUI tools)和“神奇的方法学(fancy methodologies)”真的会改变编程技术吗? Bjarne Stroustrup:的确如此。比方说,“用Borland C++ Builder来制作一个界面”和“直接用一个库来设计这个界面”二者之间存在巨大的差异。但是,并非每一项编程任务都适合用GUI工具完成,而且我也认为绝大多数“严肃系统”的构建,很大程度上不会受GUI工具影响,而这正是C++最能施展威力的领域。 “神奇的方法学”一词对不同的人有不同含义。我不是“伴有支持工具的、精巧的设计方法”的信徒。不过,我是“系统地使用数据抽象”、“面向对象编程”和“泛型编程”的强力支持者。任何人倘若只顾坐在那儿长篇累牍地编写代码,却没有一个总体设计,不支持“类”和“模板”,其行为不过是在浪费时间,并会导致不必要的维护问题。 优秀程序的关键在于“类”、“类层次结构”和“模板”,它们直接体现设计决策,而且保持“以分离的代码处理不同的问题”。对付“复杂的应用”的最佳方式首先是设计其支持库。没有库的支持,在C++中几乎任何事情都难于处理。有了适当的语言支持,大多数事情会简单起来。在C++语言的设计中,大量的努力花费在“为了库的编写”之语言功能的改善上,原因之一正在于此。 Biltek:对初涉计算机/编程生涯的学生和程序员们,您有什么建议? Bjarne Stroustrup:不要只学习计算机和编程。从一种或其他更多种领域中积累经验,你会学到专业知识,这可以使你明白,什么东西值得你编程处理。另外,要确保你能够通过书面或口头有效地表达自己的想法。解释不清的想法是不会有什么结果的。 看待程序和系统时,要尽可能直接使用代码来表达概念 — 不论使用何种语言。只熟悉一门语言会导致想象力的僵化,要学习几门编程语言,这也是医治“顽固病”的处方。一般而言,要熟悉多种系统、思想和技术。学生时代是可以广泛涉猎的时间阶段。以后到了“现实世界”,你很可能不得不专注于少数几个专门问题,而探索和实验的时间将大大减少。 如需了解更多关于C++的信息,请访问我的个人主页: http://www.research.att.com/~bs 。 |