Android为什么选择了Java、iOS为什么选择了Object-C?

本文来源于“码农翻身”

2007年Android 刚刚出生的时候, 看到开发语言是Java , 我很高兴, 因为想在手机端编程的话不用去学Object-C这个看起来怪怪的语言了, 但另一方面我心里也是打了个大大的问号 :因为在很多人眼里, Java 是很慢的, 用Java 来开发手机端的应用, 尤其是游戏, 到底行不行?

  事实证明,用Java来开发应用完全没有问题, Android 这八九年的发展超出了所有的人预料, 在智能手机端的占有率高达80%。

  一个好玩的现象是:这些年大家似乎并不太关注应用程序的性能, 相反关注的是手机的性能, 小米倡导的跑分文化流行一时, 大家拼命的堆砌硬件, CPU从双核,4核 到8核 ,  RAM 从1G 到2G,3G, 4G, 6G...  , ROM从4G 到8G,16G,32G,64G, 甚至128G。

  Google 在刚刚发布Android的时候绝对想不到现在的手机性能会过剩成这个样子, 那他们当时为什么选择了Java 作为应用开发语言呢?

  想象一下,如果你是当时的负责人, 需要作出决断, 你会怎么选择?

  首先看看C语言, 简单灵活, 贴近硬件, 性能极佳, 指针异常灵活, 是开发系统软件的不二之选, 但是Android要讨好的是无数的应用程序开发者, 如果让他们用C语言去写界面程序, 非累得吐血不可。

  那C++是不是好一点?   从C发展而来,面向对象, 性能好,类库也不少,在游戏领域也取得了成功。

  拜托,这个语言复杂到了令人发指的地步, 也没有摆脱C的指针和内存管理的陷阱, 就别去折腾程序员了。

  另外可移植性也是非常重要的考虑因素, 相比电脑,手机平台更加多样化,如果用C或者C++ , 把移植的工作交给程序员做, 一定会被骂死。

  C# 怎么样?   看起来不错, 但这是微软平台的东西, 而微软是Google的死对头, 再说了Android 肯定是要开源的, 就不用考虑C#了吧。

  Lisp ?   强大的令人发指, 学习曲线之陡峭也令人发指, 不改变编程思维是学不好的, 能用Lisp编程的人都是黑客, 为了吸引广大屌丝,  果断放弃!

  Smalltalk ?   估计会的人也不多了。

  有人说Javascript ,  这们只是运行在浏览器中的语言,  而我们要的是能开发原生(Native)应用的语言!

  Ruby 呢? 简洁优雅,  别的语言都是对机器友好, 要充分的压榨机器的性能, Ruby 可是号称对程序员最友好的语言啊。

  其实Ruby 各个方面都很好, 除了致命的一个因素: 太慢 !  这一点就把Ruby 排除在外了。

  剩下的知名度较高的高级语言也就剩下Python 和 Java 了。

  Python 性能还行, 用的人不少, 也能跨平台。

  Java 语言非常成熟,性能也可以(当然得优化一下), 用的人超级多(全球号称有1000万) , 能把1/10的人拉进来做Android开发那就非常不得了,   社区更加成熟, 跨平台更是java 的招牌。

  所以, 还是选择Java 吧。

 

地球人都知道,iOS 最初的开发语言是Object-C (当然现在Swift流行起来了), 这个Object-C是从哪里来的呢?

时间得回到上个世纪80年代初。

Brad Cox and Tom Love 两个人在ITT(国际电报电话公司, 不是更加著名的AT&T)工作, 他们俩接触到了SmallTalk 这门伟大的语言。

SmallTalk 可以说是世界上第一个真正的面向对象的语言,第一个具备垃圾回收的语言, 第一个拥有真正的集成开发环境的语言, 第一次引入了MVC的概念来开发软件的语言。

SmallTalk 对后来的语言产生了极大的影响, 尤其是对Java 和Ruby , 当然还有Object-C。

两个人被彻底的震撼了, 他们觉得这才是开发复杂软件的不二之选, 他们迫不及待的想在自己的公司用起来, 但是公司已经有很多基于C的产品了, 不能直接用Smalltalk。

那为什么不增强一下C, 添加一点像SmallTalk那样的面向对象特性呢?

Cox说干就干 ,很快就搞出一个C的面向对象扩展, 他把它称为Object-Oriented Pre-Compiler (面向对象的预编译器), 实际上它就是个预编译器, 它产生的代码恰恰可以作为C编译器的输入, 最终被C编译器变成机器码。

1983 ,两人成立了一个叫PPI ,后来叫StepStone的公司来商业化他们的产品。

1986年, Cox 出版了一本书《Object-Oriented Programming, An Evolutionary Approach》来描述Object-C 这门新的语言。

Object-C 深受 Smalltalk的影响, 开发iOS的同学应该知道,调用方法其实就是给对象发送消息, iOS应用的框架就是MVC, 这些其实都来源于SmallTalk的思想。

Object-C 看起来不错, 但没有引发像Java 那样引发轰动,只能说生不逢时, 造化弄人啊。

1985, 救世主终于出现了。 乔布斯被自己亲手创办的苹果公司扫地出门, 建立了一个叫NeXT的公司,这家公司的目的就是建立软件硬件于一体的计算机。

1988年,NeXT选择了Object-C作为应用程序的开发语言, 并且扩展了著名的开源编译器GCC 使之支持 Objective-C 的编译。

使用 Objective-C 开发了 AppKit 与 Foundation Kit 等库,这些库成为了NeXTSTEP 这个操作系统的UI基础 。 另外大名鼎鼎的interface builder 也是基于这些库建立的。

看过《Android为什么选择了Java》的同学可能会问, 乔布斯为啥不选Java 呢?

拜托,这是1988年, Java还没有诞生呢!

看看NeXT的界面, 这是1988年, 绝对甩几年后才出世的Windows 3.1 好几条街, 充分展示出了基于Object-C的图形界面的优势。

但是NeXT计算机没有取得预料中的成功,估计只卖了5万台左右。

其中有一台NeXT非常著名, Tim Berners-Lee 在欧洲核子研究中心(CERN) 使用它发明了互联网, 世界上第一个Web服务器和浏览器就运行于此, 欣赏一下:

虽然硬件不成功, 但是NeXT的软件尤其是AppKit, Foundation Kit却获得了广泛的赞誉。

1996年, 乔布斯的NeXT被Apple收购, 乔帮主王者归来, 他承诺一定要把NeXT的软件和Apple的硬件结合到一起, 这就是后来的MAC OS, iOS。

Object-C 作为原来NeXTSTEP的第一等公民, 肯定要被移植过去了。

所以当iPhone 2007年横空出世, 重新定义手机的时候 , Object-C 也就活了, 全世界的程序员就开始了学习Object-C的狂潮。

但是后来iOS为什么还不支持Java呢? 理论上只要在iOS上搞个虚拟机就行。

2007年,乔布斯在接受《纽约时报》记者约翰·马尔科夫(John Markoff)采访时说,“Java不值得我们嵌入到自家产品。人们不会再去使用Java,它就是一个巨大的累赘。”

让乔布斯遗憾的是,Java并未消失,相反,这个由Sun开发、甲骨文继承的编程语言,给苹果制造了巨大的麻烦, 尤其是Android。

我想本质原因还是由于苹果公司的基因, 一直以来都以软硬一体,封闭的系统而傲然站立于IT界, 从最早的Mactonish到后来的Mac, iPhone都是如此。

所以让心高气傲的乔布斯去用一个开源的东西, 还可能会牵扯到别人的专利, 那是万万不行的。

posted @ 2017-02-28 07:41  象棋中的象棋  阅读(10188)  评论(1编辑  收藏  举报