舍得的书法作品:一位怀疑论者眼中的C++发展史

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 02:52:03

一位怀疑论者眼中的C++发展史


作者: Chad Perrin
翻译:PurpleEndurer,2011-01-17第1版
分类: C/C++, Go, Mac OSX, Objective Caml, Objective-C, Programming Languages
标签: C, 苹果公司, Apple Inc., C++, Language, Bjarne Stroustrup, Objective-C, C/C++, 编程语言, Programming Languages, 软件开发, Software Development, 软件/网站开发, Software/Web Development

  Bjarne Stroustrup把编程语言C++设计为C语言的一个改进版,融入了一些增强特性。其中最生要的可能就是内置了面向对象编程机制,如该项目早期开发阶段的暂定名称所示:“带类的C(C with classes)”。
  它大量应用于注重性能的软件开发,特别是在非常复杂的应用程序开发领域,在其中使用一点OOP就对那类复杂处理大有帮助。不幸的是,C++本身是一个极其复杂、令人讨厌的语言。
  起初,设计者承诺C++会成为带有面向对象编程机制的C语言超集。在大约同一时间(之后不到三年)围绕相同的目标发展出了另一种语言,即Objective-C。

  在很大程度上,语言之间的差异可以归结为两点:


▲它们设计所受的影响
▲它们对早期目标的实现程度


  在维基百科的条目中,C++受到了大量语言的影响,这些语言包括C(这很自然), Ada 83,ALGOL 68,CLU,ML和Simula。对大部分C++普通用户来说,要不加思索地把这些语言列出来可能会有困难,并且即使让普通C++程序员各自列出清单,再从中随机抽出两张清单来进行比较,上面列出的语言一般也不尽相同。这些语言对C++的影响在一定程度上被它们对新语言的屈从而掩盖起来了,并且有一些人可能会提议苦艾酒(absinthe)是另一个重要的影响。


  *PurpleEndurer注:维基百科中的C++条目

http://zh.wikipedia.org/zh-cn/C%2B%2B

  相比之下,Objective-C所受的两大影响,即使是最菜的Objective-C程序员(可能不包括那些不知道程序设计语言的历史比MacOS X更悠久的人)也会立即想到:C和Smalltalk。维基百科上关于Objective-C的文章里提供了这两个,并且也只有这两个,它们对Objective-C语言设计的影响显而易见。
  就达到最期设计的目标——提供C语言的一个具有面向对象编程机制的超集这一方面说,Objective-C在所有必要细节上展现出了成功,而C++在某些方面看起来更像是在权衡中放弃了这些目标,来追求光彩眩目的替代品的结果。
  由于Objective-C受到的影响要比C++更简单,如此一来语言设计也更简单。苹果公司(以及之前的NeXT)选择Objective-C作为其主要面向对象应用程序和系统的开发语言的原因看起来很明显,就是因为它提供了设计上的简洁和优雅——至少与C++的设计相较而言。此外,被选为苹果公司平台(如MacOS X和iOS)上的语言,也许会让它显得更为卓越,但在普及和影响力方面,C++却是明显的赢家。即使在现在,C++在问世这么多年后仍被大量使用着,并没有像Objective-C那样经历过大沉浮。例如,它是非苹果平台上的所有最流行网络浏览器的核心实现语言;Chromium,火狐,IE浏览器和Opera都大幅使用C++来创建。甚至苹果公司的Safari浏览器也主要是用C++编写,尽管MacOS X上的其他浏览器都是使用Objective-C语言开发。
  事实也许是,C++比Objective-C早大约三年时间进入市场,这导致了C++的巨大成功,而Objective-C则在受欢迎程度上失了先机。最终我们虽然可以在每一个主要书店的架子上都发现与Objective-C语言有关的编程书籍,但这些书着重于介绍MacOS X和苹果iOS平台上的开发。把Objective-C当作通用、与平台无关的语言来使用的想法显然不够受欢迎,相关的书籍自然也不为售书商所亲睐了。
  C++所受的批评看起来是大大多于它所获的赞誉。与此同时,谈论Objective-C的人(大部分)是苹果软件平台的开发者。专注于苹果软件平台的开发者通常会被对苹果软件平台存有偏见的其它程序员认为是靠不住的,如此一来,他们对Objective-C的高度赞扬在非苹果平台开发者中影响不大。
  C++语言所受的可能最好的两个批评都得归因于Stroustrup自己。第一个是他声称“用C语言很容易搬起石头砸自己的脚,而在C++里你想搬起石头砸自己的脚更为困难了,不过一旦你真的做了,整条腿都要报销。”(C makes it easy to shoot yourself in the foot, and C++ makes it harder — but when you shoot yourself in the foot with C++, you typically blow off your whole leg.)第二个是他接受IEEE电脑杂志的采访,该杂志因被认定不能出版而被搁置。在采访中他“承认”C++从一开始是完全是个玩笑,他又诙谐地颂扬它的缺陷。Stroustrup已经否认该文章,称这是一个骗局,并说他认为如果文章是他自己写的那将会更有趣。


  *PurpleEndurer注:关于这次采访可参考:面向对象是个骗局?!
http://sd.csdn.net/a/20100929/280061.html

  在读到这篇虚构的采访文章时,人们一时可能会不由地放弃了对“C++真的从一开始就完全是个笑话”的问责。如果是这样,那么这个笑话似乎是以Objective-C受损为代价的,它默默无闻地徘徊了将近一个时代——电脑技术的时代——在最终于苹果软件开发社区觅得适合的位置之前。事情的事实是,没有Objective-C和Cocoa,苹果公司将几乎肯定会在寻求支持其平台的开发者时遇到真正的麻烦;在使用这些工具进行开发的过程发现了许多喜悦,这有助于受苹果公司的法律和市场部门拘束的开发者们克服他们的一些疑虑。

  现在有人可能会认为C++的日子屈指可数了。那些看起来似乎更适合于同样工作的备选方案纷纷涌现,而Objective-C作为明显的直接竞争对手,在某些方面却是其中最无关紧要的一个。Objective Caml经常被举为高性能语言的一个棒样,它经常在基准测试中以显著幅度领先于C++,提供更加简洁和组织良好的源代码,并向开发者们提供更干净、更有趣的开发模式,它甚至不起源于同一个编程语言家族。D语言旨在参与同一空间的竞争,但其专有根源可能妨碍其广泛采用。谷歌的Go语言虽然作出了有争议的取舍,但毫无疑问,它在设计上为包括并发在内的某些类型的软件开发提供了巨大的优势。

  *PurpleEndurer注:关于Objective Caml,可参考:OCaml - 维基百科,自由的百科全书
http://zh.wikipedia.org/zh/OCaml

  不过,由历史经验教训来看,我倾向于认为在未来一段时间内,C++还有一段漫长、稳定的任期。它甚至偷偷进入操作系统内核开发领域多年,这对那些关心操作系统可靠性之类事情的人来说是一个可怕的想法。毫无疑问,C++为某些对性能要求较高的编程类型提供了一些优于C语言的优势,并且它的库支持极其广泛——堪称传奇。尽管如此,至少其对把持开发者的某些力量似乎是基于对替代品的一无所知,这是一个不会很容易就被潜在竞争对手推到一边置之不理的特点。(完)