东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

给 Objective-C 的“悼词”

  • 2015-08-14
  • 本文字数:2480 字

    阅读完需:约 8 分钟

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

2015-08-14 08:393705
用户头像

发布了 164 篇内容, 共 103.3 次阅读, 收获喜欢 391 次。

关注

评论

发布
暂无评论
发现更多内容

前端面试实录HTTP篇

控心つcrazy

https HTTP 前端面试 前端已死

“ONE”有引力,4月21日见!

博睿数据

智能运维 博睿数据 发布会 Bonree ONE

AI日课@20230407:别为下一代过虑;现在多多体验产品

无人之路

ChatGPT

Web & WebDav Server在Mac上创建Web服务器

Rose

Web 服务器 mac软件下载 Web & WebDav Server破解

TypeScript常用代码块

青柚1943

LED显示屏近年来在中国的发展趋势

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

QEMU事件循环机制

Linux内核拾遗

Linux Kenel 虚拟化 事件和事件循环 qemu kvm

Django笔记三之使用model对数据库进行增删改查

Hunter熊

Python django model 增删改查

王者荣耀商城异地多活架构设计

白杨

LG电视如何投屏?Mirror for LG TV智能投屏工具轻松解决

Rose

mac软件下载 LG电视 投屏软件 Mirror for LG TV

Mac 无线网络扫描工具:WiFi Explorer 3.4.2 (57)激活汉化版

真大的脸盆

无线管理 wifi工具

千亿流量并发治理!Alibaba实战Sentinel笔记,为微服务保驾护航

做梦都在改BUG

Java 微服务 sentinel 高并发 流量治理

用户需求挖掘与分析,某新零售快消品电商系统成功交付的秘诀

L3C老司机

产品 产品设计 需求分析 产品管理 用户画像

PreSonus Studio One 6 Pro最新版v6.1.1中文下载 (音乐创作编辑软件)

Rose

Studio One6 Studio One 许可证 Studio One 破解 音乐制作软件

Vue3常用代码块

青柚1943

封仲淹:OceanBase开源技术生态全景解析

OceanBase 数据库

数据库 oceanbase

IBM Semeru Runtime 17.0.6.0 在 Linux 下的安装

HoneyMoose

阿里云可观测 2023 年 3 月产品动态

阿里巴巴云原生

阿里云 云原生 可观测

如何清理优化你的Mac?MacCleaner Pro系统综合清理释放磁盘空间!

Rose

磁盘清理 mac系统清理优化软件 MacCleaner Pro下载 如何清理苹果电脑

失真的概念和定义

timerring

信息论 信息论与编码

架构实战营模块 5 作业

白杨

intellijidea卸载重装无法打开怎么办?IntelliJ IDEA彻底卸载教程

Rose

IntelliJ IDEA 2023下载 IntelliJ IDEA 2023破解 IntelliJ IDEA 2023最新 IntelliJ IDEA卸载

Github标星42K!不愧是腾讯云大神亲码的“redis深度笔记”

采菊东篱下

Java redis 面试

OpenTiny 的这些特色组件,很实用,但你应该没见过

Kagol

开源 前端 Vue3 组件库

macOS 网站下载和离线浏览工具:SiteSucker Pro中文版

Rose

苹果软件资源站 SiteSucker Pro中文 整站下载工具 SiteSucker Pro Mac版

DDD洋葱架构才是 yyds!阿里大牛手记(DDD)领域驱动设计应对之道

做梦都在改BUG

Java 领域驱动设计 DDD 架构师

Drone CI 部署

流火

Goerli测试币领不到了?还有这三个解决方法

加密先生

eth Goerli

D-ONE计划解读|得帆云DeCode持续引领低代码产品演进!

得帆信息

新产品 低代码平台 aPaaS

了解5G安全标准,看这一篇就够了

俞凡

安全 网络 通信

5分钟搞懂NESAS

俞凡

安全 网络 通信

给Objective-C的“悼词”_移动_徐川_InfoQ精选文章