美文网首页我爱编程
给Objective-C的“悼词”

给Objective-C的“悼词”

作者: 狼凤皇 | 来源:发表于2016-02-04 16:22 被阅读106次

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 时代开始,就深深打上了苹果的烙印,它具体还能走多远,还要看苹果对它的支持,但至少目前,它还没有死亡。

相关文章

  • 给Objective-C的“悼词”

    Aaron Hillegass是知名的 Objective-C 开发者和布道者,他于 90 年代在 NeXT 公司...

  • 给妈妈的悼词

    我最爱的妈妈于二零一八年五月四日永远离开了我。今天是她离开的第三十三天。我们的家遭受重创,每个人都沉浸在巨大的悲痛...

  • 给自己的悼词

    这是灵性书写训练营第一课的作业。意外和明天,谁也不知道哪个先来。清醒的时候写好悼词,我觉得很幸福。存档: 我原本梦...

  • 给自己的悼词

    三年前就思考过这个问题。三年后,如今再来思考。其实提起这个问题本身,就需要勇气。浑浑噩噩,忙忙碌碌过活着,...

  • 悼小闹钟

    小闹钟坏了,儿子砸碎了它。我不知道咋教育他,我就当着他的面给小闹钟说了悼词。悼词内容如下: 小闹钟啊!小闹钟,你被...

  • 给自己的人生悼词

    亲爱的英颖: 哈!你说离开就真的离开了!你真的是一个超级超级行动派啊! 我记得你从三十多岁起就在做准备死亡这件事,...

  • 我给妈妈致悼词

    我的妈妈今年做直肠癌手术时感染了新冠肺炎,于1月8日逝世,到了出殡那天,由于是正月初五,还未开假,干休所无人来...

  • 暮春秋色

    若没有人给昨天写悼词,那今天就毫无意义

  • 给天使、纯净灵魂的悼词———“Vincent”

    也许你听过也许没有,如果偶尔你会喜欢一个人静静的,推荐听一听这首美国乡村音乐歌手唐纳德·理查·麦克林(Don...

  • 悼词

    伟大的史蒂芬.霍金离开了这个“世界”,我们会“永远”记住他。他的“伟大”不仅仅是因为他“伟大”,更重要的原因,是因...

网友评论

    本文标题:给Objective-C的“悼词”

    本文链接:https://www.haomeiwen.com/subject/ayvekttx.html