写点什么

给 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:394323
用户头像

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

关注

评论

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

社交APP的核心功能

北京木奇移动技术有限公司

社交APP 软件外包公司 APP外包公司

CAD背景怎么改成黑色?

在路上

cad cad看图 cad软件 CAD看图王

KubeEdge-Sedna v0.7.0 发布:联合推理引擎原生集成K8S HPA,系统稳定性全面升级

华为云原生团队

云计算 容器 云原生 kubeedge

【异常总结】SeaTunnel集群脑裂配置优化方法

白鲸开源

大数据 开源 分布式系统脑裂 数据集成 Apache SeaTunnel

自然语言×数据集成新范式:SeaTunnel MCP深度解读 | 附视频讲解

白鲸开源

人工智能 数据集成 大模型 Apache SeaTunnel MCP

百度智能云加入中国计算机学会数据库专委会 共启数据库技术新篇章

科技热闻

域名解析怎么查询?有哪些域名解析查询方式?

国科云

大语言模型推理优化技术综述(The Art of LLM Inference)

Baihai IDP

AI LLM LLM serving LLM 推理优化

Microchip推出成本优化的高性能PolarFire® Core FPGA 和 SoC产品

新消费日报

社交APP开发的技术框架

北京木奇移动技术有限公司

社交APP 软件外包公司 APP外包公司

社交APP开发的技术难点

北京木奇移动技术有限公司

社交APP 软件外包公司 APP外包

Spring AI Alibaba 发布企业级 MCP 分布式部署方案

阿里巴巴云原生

阿里云 开源 微服务 云原生

CAD图纸中的文字看不到,这是什么原因?

在路上

cad

4月报 | SeaTunnel支持TDengine的多表Sink功能

白鲸开源

tdengine 开源社区 数据同步 Apache SeaTunnel

“从复眼到智慧”:观测云2025发布会专访—— CEO 蒋烁淼

观测云

人工智能

“支付宝碰一下”成行业新宠,必胜客300+门店打造智慧餐饮新体验

科技热闻

【每天学点 Go 知识】Go 基础知识+基本数据类型快速入门

小曾同学.com

Go 变量 Go基本数据类型

NextVault 发布去中心化收藏品金融白皮书:用双代币模型重构 Web3 拍卖与电商生态

TechubNews

中昊芯英作为专精特新“小巨人”企业代表,受邀出席全省科技创新和产业创新深度融合推进制造业高质量发展大会

科技热闻

Apache DolphinScheduler存储系统详解| AI生成技术文档系列

白鲸开源

大数据 AI Apache DolphinScheduler AIGC 技术文档

社交APP的开发流程

北京木奇移动技术有限公司

社交APP 软件外包公司 APP外包

传统可观测性的尽头,是LLM可观测性的起点

Yakun

可观测性 LLM GenAI LLM可观测 LLM评估

基于 Flink+Paimon+Hologres 搭建淘天集团湖仓一体数据链路

Apache Flink

大数据 flink 实时计算 实时计算Flink

一套稳定抓取竞品页面的Python代码方案!原来这么简单!

kookeey严选代理

Python 动态代理 代理IP 爬虫实战

一招解决SeaTunnel Excel中无法将数字类型转换成字符串类型的问题 | 附源码打包

白鲸开源

大数据 Excel 数据同步 数据集成 Apache SeaTunnel

25年宁夏等保测评机构名单汇总

行云管家

网络安全 等保 堡垒机

京东商品评论API接口指南

tbapi

京东商品评论API 京东评论API 京东商品评论数据采集 京东评价接口

CST sudio suite仿真案例:PCB热仿真1——元件热源

思茂信息

CST软件 CST Studio Suite 热仿真

混合应用开发新范式:2025跨端生态与企业效能跃迁双擎驱动

xuyinyin

我这没有几百块的小程序,饶了我吧!

程序员郭顺发

InterDigital新研究:沉浸式内容将使无线网络面临极限,推动视频与6G创新的发展

财见

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