给Objective-C的“悼词”

来源:互联网 发布:绝对值 java y== 编辑:程序博客网 时间:2024/04/29 01:01

转载自:http://www.infoq.com/cn/news/2015/08/Eulogy-for-Objective-C

Aaron Hillegass是知名的Objective-C开发者和布道者,他于90年代在NeXT公司工作,后来专注技术布道,是Big Nerd Ranch的创始人兼CEO。他撰写了多本Objective-C书籍,在苹果发布Swift后,目前他开始将布道重心转向Swift。在6月8日举办的AltConf2015上,他向与会者做了《给Objective-C的悼词》的演讲,回顾了Objective-C的发展和它的影响,但在最后他话锋一转,说明了为什么Objective-C没有真正死亡。

回顾Objective-C的发展历程

要回顾Objective-C真正的起源,我们需要从1962年谈起。在那个连互联网都没有的年代,在NR计算中心的两个小伙为了改善ALGOL,创造了Simula,并在1967年发布了Simula-67. 它第一次使用了点式语法,从此你使用对象方法就用小圆点去调用了。

稍后,Smalltalk团队开始打造另外一个面向对象语言,到1980年他们推出了“标签:变量”风格的语言Smalltalk。Smalltalk做了很多超前的事情,它不仅仅是一个语言,还包括一个完整的操作系统。方括号也是它引入到编程语言中的,Smalltalk使用它处理变量,Objective-C则用它来放置消息。

研发Smalltalk的那群人后来去了施乐帕洛阿图研究中心,继续鼓捣他们感兴趣的东西。

Smalltalk十分超前,对后来者有很大的影响,但它的问题在于,使用Smalltalk需要完全抛弃以前的东西,并需要你成为它的一部分,这无论对于开发者还是用户都不是很友好。

后来一个叫Brad Cox的人来了,他认为与其进行语言革命,不如进行渐进式的创新。他拿一个大家熟悉的系统级编程语言,然后给它加上面向对象的Smalltalk风格的消息传递,这就是Objective-C的由来。Brad Cox在他的书籍《Object-Oriented Programming: An Evolutionary Approach》中解释了这些。

Brad Cox和Objective-C的联合创始人Tom Love为这门语言创建了公司以专门支持它,这就是Stepstone。但是,Stepstone版本的语言仅仅是一个C语言的预处理器或者说编译器,它会将消息传递转换为C语言的函数。此时它还没用引用计数等功能,其标准库为ICpak 210.

此时它也并不叫Objective-C,等到NeXT从Stepstone购买下这个语言的商标时,它才改名叫“Objective C”,并且加入了点式语法。

NeXT将Objective-C作为它编写GUI的工具,毫无疑问这是物尽其用的,因为GUI天生适合使用面向对象的语言来编写——GUI里的控件就是一个一个的对象。

NeXT的GUI系统包含一个PostScript服务器,里面都是用Objective-C编写的GUI对象。不过当时的系统还很粗糙,当项目逐渐变大后出现了很多问题。

此时Scott Ritchie、Steve Naroff、Blaine Garst等人出来拯救世界。他们给Objective-C带来了更多的特性和更好的性能。诸如blocks、动态机制、缓存机制等特性都是他们创造的。

Objective-C的先进性

由于引入了Smalltalk中的很多理念和特性,在那个年代,Objective-C在很多方面很先进,甚至超越时代。

Objective-C的一个美妙的地方是它的动态特性。这给我们带来很多好处。比如在很早的时候它就有内省(introspection),但直到Java出了这个API并给它命名之后我们才知道它是什么;然后是弱类型,最初所有变量的类型都是id对象,后来才称这种类型为NSArray*,它对于unarchiving和target-action模式很有用;然后是isa-swizzling,faulting机制就是利用它来提高性能;以及在运行时创建类的能力,虽然一般编程中很少用到,但KVO正是依靠了这个机制。

另外还有一个特性现在人们认为非常好,但当时认为简直是疯了,那就是category。它改变了我们编程的方式,以及对frameworks的看法,不过因为它违反了当时人们认为的面向对象编程的教条,当时Java派的人不是很喜欢它。

对Objective-C的改进

自Objective-C被NeXT收购后,介绍Objective-C的书籍纷纷出炉。当时有《Objective-C: Object-Oriented Programming Techniques》和《Object-Oriented Programming and the Objective-C Language》,后者有NeXT出品,是当时介绍Objective-C最好的书籍。

当NeXT意识到语言中存在的问题后,它们开始重写OpenStep操作系统,这次他们给Objective-C加上了引用计数、前缀、更多的类型等。OpenStep还被授权给Sun公司使用,作为交易的一部分,OpenStep需要以某种方式开源,于是他们创建了GNUstep项目,这是OpenStep的一个实现,继承了OpenStep的大部分API。

但是,改进后的Objective-C仍然存在问题,就是它的基类很脆弱,里面定义了大量的实例变量,导致后期无论是对基类进行修改还是另建基类都很困难。

Objective-C 2.0的出现解决了这个问题,它还添加了快速枚举、GC以及后面的ARC等。但是,有些历史遗留问题仍然没有得到解决。

Swift的出现

但是,无论如何改进,改变不了Objective-C已经存在几十年的事实,有些历史遗留问题无法解决,有些语言特性也已经落后时代。只有另起炉灶才能彻底消灭这些问题,而苹果陷入有魄力去做这一件事。

Swift相对于Objective-C是一个很大的进步,它的C语言风格更少,更加现代,因此我们可能会损失一些底层的编程能力,但它也给开发者工具带来了更多创新的可能性,比如Playgrounds。

但Swift也并不是毫无缺点,为了保持和Objective-C的互操作性,在有些地方不得不做妥协,苹果在继续发展Objective-C和彻底抛弃UIKit之间选择了一条中间道路,这就是Swift。

慢着,Objective-C未死

但是,Objective-C并没有真正死亡,苹果在Objective-C的库上投入了很多,如UIKit、AppKit、Foundation等。所有苹果软件都基于Objective-C编写,并且苹果仍在积极的改进这门语言,比如最近添加的模板、non-nil类型,毫无疑问Objective-C仍将在苹果的生态系统中存在很长时间。

并且,Aaron Hillegass认为,Objective-C仍然是编写与C/C++语言代码交互的最佳选择,Swift更适合高级别一些的事情。

不过,就连Aaron Hillegass本人都转向了Swift的布道,这说明Swift值得目前就投入精力去学习和研究。

Objective-C自从NeXT时代开始,就深深打上了苹果的烙印,它具体还能走多远,还要看苹果对它的支持,但至少目前,它还没有死亡。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 wifi登录名忘记了怎么办 苹果手机微信图纸打不开怎么办 手机qq邮箱文件打不开怎么办 12360忘记用户名和密码怎么办 刚开店铺没生意怎么办 淘宝账户不符合注销条件怎么办 网易邮箱登录密码忘记了怎么办 q号密码忘记了怎么办 志愿者注册忘记密码和用户名怎么办 w10电脑语言栏不见了怎么办 w10美式键盘没了怎么办 xp电脑开机密码忘记了怎么办 电脑开机密码到期忘记改怎么办 电脑账户数据库密码忘了怎么办 微信不能拍摄了怎么办 华硕笔记本用户名密码忘了怎么办 学信网登录密码用户名搞忘怎么办 电脑密码输入错误会被锁怎么办 电脑被锁机软件设了密码怎么办 电脑密码被锁了怎么办 电脑xp密码忘了怎么办 三星账户账号密码忘了怎么办 三星账户密码忘记了怎么办 w7账号被禁用了怎么办 笔记本用户名密码忘记了怎么办 笔记本忘记用户名和密码怎么办 苹果手机忘记用户名和密码怎么办 w10电脑忘了密码怎么办 联想台式电脑密码忘记了怎么办 新电脑用一会就很烫怎么办 电脑忘了密码怎么办啊 戴尔笔记本账户密码忘记了怎么办 华硕台式电脑开不了机怎么办 手机号申请qq账号上限了怎么办 店铺不干了被告商标侵权怎么办 咸鱼违规被投诉侵犯商标权怎么办 房子买了70年后怎么办 买房付完首付后怎么办 手机b站忘记密码怎么办 护士电子注册没有激活码怎么办 大王卡变3g网是怎么办