Java与Objective-C的渊源

java创始成员Patrick Naughton回忆,通常人们会认为Java是学Modula-3和C+,其实这些都是谣传,而对Java影响比较大的则是Objective-C:单 继承、动态绑定和加载、类对象、纯虚函数、反射、原始类型包装类等。Java的接口直接抄自OC的协议。

  Objective-C是扩充C的面向对象编程语言。它主要使用于NeXTSTEP和Mac OS X系统上,也可以在gcc运作的系统写和编译。通常人们会认为Java是学Modula-3和C++,甚至还有人说Java是模仿 NewtonScript,这些都是胡说八道和谣传。

  Java语法可能与C++类似,但作为语言来讲,其与C++并无相似性。Java的核心语法是动态绑定以及主要使用单继承、类对象以及可扩展的运行时系统。而C++和Modula-3则远离这种任何面向对象语言都所具备的特性。而最值得注意的是,NeXT上的Objective-C与Java几乎有着惊人的相似性:单继承、动态绑定和加载、类对象、接口、反射、原始类型包装类等

其实这并不算奇怪,Patrick Naughton准备离开Sun加入到NeXT时,他在曲棍球队联赛上遇到了Scott McNealy(Sun公司董事会主席及联合创始人)。Scott告诉他不该离开Sun。

所以Patrick并没有离开,并且成为最原始的Oak团队成员之一,他在团队中的亲和力使NeXTSTEP能够出现在Java中,使Java看起来与Objective-C有极其相像的外观(NeXTSTEP上的主要开发语言)。


以上是Sean Luke和Tom Gall邮件里的内容,下面是Patrick看完邮件后写的内容:

  当时我们有许多朋友在NeXT工作。Bruce Martin负责NeXTSTEP的486端口、Peter King、Mike Demoney和John Seamons则致力于开发神奇的(从未发行)NRW(NeXT RISC Workstation,88110???)。后来,他们也加入到我们的队伍中,并且一起编写了第一版的Oak。我十分肯定,Java的接口 (interface)是直接抄至Objective-C的协议,该协议大部分都是由NeXT成员设计的。那些奇怪的原始包装类例如Integer和 Number等都来自Lee Boynton之手,其中较早的搞NeXT Objective-C类库的家伙讨厌int和float类型。

  另外一件非常有趣的事情是,John Seamons(刚好是Andy Bechtolsheim在斯坦福大学的室友,主要负责Unix to SUN-0的首端口)曾做过一个Oak(Java)给Newton。我们当时正在试图与3DO做一笔交易,作为他们的OS/API,但我们手头上没有任何 3DO开发系统,所以John拆开一个Apple Newton 100,并连接到一个逻辑分析仪上,逆向其工程接口,并且拿原始的Star 7演示放在这台机器上运行。3DO交易结束后,大部分大码就丢失在历史长河中了……

事实证明,Tom和Sean说的是非常正确的。当我准备离开Sun加入到NeXT时,我认为Objective-C是最酷的东西,并且我非常讨厌 C++。于是,自然而然的,当我最终留下来启动Java项目时,Objective-C对我的影响很大,James Gosling比我大点,他拥有大量的SmallTalk和Simula68经验,因此我们也轻松地从中获得了一些。