← 返回故事列表

被遗忘的桥梁:Objective-C如何用Smalltalk的灵魂重塑了C语言的未来

时代:1984
阅读时间:10 分钟
浏览:4
点赞:0

1984年,当布拉德·考克斯(Brad Cox)和汤姆·洛夫(Tom Love)在弗吉尼亚州赫恩登的一间不起眼的办公室里,将Smalltalk的面向对象消息传递机制嫁接到C语言上时,他们或许并未意识到,这个名为“Objective-C”的混合体,将在三十年后成为人类历史上最庞大软件生态系统的基石。但

# 被遗忘的桥梁:Objective-C如何用Smalltalk的灵魂重塑了C语言的未来 1984年,当布拉德·考克斯(Brad Cox)和汤姆·洛夫(Tom Love)在弗吉尼亚州赫恩登的一间不起眼的办公室里,将Smalltalk的面向对象消息传递机制嫁接到C语言上时,他们或许并未意识到,这个名为“Objective-C”的混合体,将在三十年后成为人类历史上最庞大软件生态系统的基石。但此刻,他们面临着一个尴尬的现实:没有人想要它。C语言程序员鄙视其“臃肿”的运行时,Smalltalk信徒嘲笑它“不纯粹”的设计。这门语言像是一个没有归属的孤儿,在技术的寒冬中瑟瑟发抖。直到一位被自己创立的公司驱逐的偏执狂,在一家名为NeXT的濒死公司中,赌上了全部身家。 ## 技术炼金术:当C语言的硬核遇上Smalltalk的灵动 要理解Objective-C的诞生,必须回到1980年代初期的软件荒漠。彼时,C语言凭借其简洁、高效和与UNIX系统的深度绑定,已经成为系统编程的王者。然而,C语言是过程式的——程序员必须像流水线工人一样,精确地安排每一个函数调用的顺序。随着软件规模的爆炸式增长(比如图形用户界面的兴起),这种“头痛医头”的编程方式导致了代码的脆弱和不可维护。 与此同时,在施乐帕克(Xerox PARC)的实验室里,一种名为Smalltalk的语言正在展示一种全新的世界观:万物皆对象,程序不是指令的序列,而是对象之间通过“消息传递”进行的协作。这种思想让代码的复用性和可扩展性达到了前所未有的高度。但Smalltalk有一个致命弱点:它运行在自己的虚拟机上,速度缓慢,且与现有的C语言基础设施格格不入。 考克斯和洛夫看到了一个清晰的缺口:能否创造一种语言,既拥有C语言的性能和对系统资源的直接控制,又具备Smalltalk的灵活性和面向对象能力?这并非简单的“加法”,而是一场炼金术。 Objective-C的核心创新在于其“消息传递”(Messaging)机制。与C++那种静态的、编译时确定的方法调用不同,Objective-C的对象在运行时才决定如何响应消息。这意味着,你可以向一个对象发送一个它根本不理解的消息,而程序不会崩溃——只要它实现了“消息转发”(Message Forwarding)。这种动态绑定(Dynamic Binding)赋予了Objective-C惊人的灵活性:你可以在运行时动态地添加方法、替换实现,甚至创建一个全新的类。这为后来的设计模式(如代理、观察者、依赖注入)铺平了道路。 然而,1984年的市场并不买账。C++凭借其“更好的C”的营销口号,迅速成为面向对象编程的主流。Objective-C则被视为一个古怪的异端——它那令人困惑的方括号语法(`[object message]`)让习惯了C语言圆括号的程序员感到不适。更糟糕的是,它的运行时库(libobjc)需要额外加载,增加了程序的体积。Stepstone公司试图将其商业化,但收效甚微。这门语言就像一颗被埋入沙砾的钻石,等待着一位能识货的伯乐。 ## 乔布斯的豪赌:NeXTSTEP与Objective-C的涅槃 1985年,史蒂夫·乔布斯被自己亲手创办的苹果公司扫地出门。愤怒而充满野心的他,创立了NeXT公司,目标是打造一台“面向高等教育”的革命性计算机。乔布斯深知,硬件可以堆砌,但软件才是灵魂。他需要一个彻底现代化的操作系统,一个能承载他所有狂想的基础设施。 NeXT的软件团队由阿维·特万尼安(Avie Tevanian)和巴德·特里布尔(Bud Tribble)领导,他们来自卡内基梅隆大学,是Mach微内核和Unix系统的专家。在寻找面向对象编程语言时,他们面临选择:C++虽然流行,但乔布斯厌恶其复杂性和脆弱性;而Smalltalk虽然优雅,但性能不足。就在此时,特里布尔想起了他在Stepstone公司工作时接触过的Objective-C。 特里布尔向乔布斯展示了Objective-C的核心优势:它不是一个全新的语言,而是一个“预处理器”——Objective-C代码首先被翻译成纯C代码,然后编译。这意味着它可以无缝地调用任何C语言库,同时享受Smalltalk式的动态特性。乔布斯被这个“双重身份”吸引了。更重要的是,Objective-C的运行时机制允许NeXT开发一个强大的框架——也就是后来的Foundation Kit和AppKit。 1988年,NeXT与Stepstone达成协议,获得了Objective-C的授权,并将其作为NeXTSTEP操作系统的核心语言。这个决策在当时看起来极其冒险:NeXT选择了一门几乎没有人使用的语言来构建其整个软件栈。但正是这个决策,孕育了现代软件开发中最优雅的框架之一。 NeXT的开发者在Objective-C的基础上,创造了一种全新的编程范式:接口与实现分离(`.h`和`.m`文件)、类别(Categories)用于扩展已有类、协议(Protocols)用于实现多重继承的替代方案。这些特性让代码的组织变得异常清晰。更重要的是,NeXTSTEP的图形界面——那个让用户惊叹的Dock、Interface Builder和NEXTSTEP的窗口系统——全部是用Objective-C编写的。这门语言在乔布斯的偏执打磨下,从实验室的玩具变成了工业级的艺术品。 1996年,苹果公司以4.29亿美元收购NeXT。乔布斯回归,Objective-C也随之成为Mac OS X(后来的macOS)和iOS的开发基石。从iPod到iPhone,从iPad到Apple Watch,数十亿行Objective-C代码驱动着苹果的帝国。直到2014年Swift的出现,Objective-C才逐渐退居二线,但它的运行时和框架依然是Swift赖以生存的基础。 ## 遗产:动态的幽灵与静态的未来 Objective-C的兴衰,是软件工程史上最深刻的寓言之一。它证明了“优雅”并不总是与“成功”划等号。在C++如日中天的年代,Objective-C的方括号语法和运行时开销被视为技术上的倒退。然而,正是这些“缺陷”,让Objective-C成为构建大型、长期维护的图形用户界面应用的最佳选择。 苹果的整个Cocoa和Cocoa Touch框架,从NSObject的根类继承体系,到KVO(键值观察)、KVC(键值编码)和ARC(自动引用计数),都是基于Objective-C的动态特性构建的。这些特性让开发者能够以极少的代码实现复杂的功能。例如,在iOS开发中,你可以通过`performSelector:`在运行时动态调用方法,或者通过`respondsToSelector:`安全地检查对象的能力。这种灵活性是静态语言难以企及的。 然而,Objective-C也有其致命的弱点:语法过于冗长,内存管理复杂(直到ARC出现),缺乏现代语言的闭包和泛型支持。Swift的出现,正是为了解决这些问题。Swift在设计上保留了Objective-C的运行时动态性(通过`@objc`标记),但引入了更安全的类型系统、更简洁的语法和更强大的函数式编程特性。 如今,Objective-C的代码依然在数十亿台设备上运行。它是一个“遗产语言”,但并非“死亡语言”。许多关键的系统组件(如Core Graphics、Core Data)仍然是用Objective-C编写的。更重要的是,Objective-C的运行时机制——那个从Smalltalk继承而来的消息传递系统——成为了Swift与旧代码交互的桥梁。苹果甚至开源了Objective-C的运行时库,使得其他语言(如RubyMotion)也能利用其动态特性。 ## 评论 Objective-C的故事超越了编程语言本身,它是关于“技术适配”和“生态锁定”的经典案例。在1980年代,当所有人都在追逐“更纯粹”的面向对象语言时,Objective-C选择了一条更务实、也更痛苦的道路:保持与C语言的完全兼容。这种“向后兼容”的哲学,最终让苹果在二十年后建立了一个牢不可破的护城河。任何试图为iPhone开发应用的人,都必须面对Objective-C的语法和运行时。 从更宏观的视角看,Objective-C的兴衰揭示了软件行业的残酷真相:技术的优劣并不决定其命运,而生态的形成和商业力量的推动才是关键。乔布斯的偏执和NeXT的失败,阴差阳错地成就了Objective-C的辉煌。当苹果最终取代NeXT成为主角时,Objective-C已经从一个被嘲笑的“混血儿”,变成了一个统治移动互联网十年的“暴君”。 对于今天的开发者而言,Objective-C的遗产在于提醒我们:最好的技术,往往不是最“先进”的技术,而是能解决实际问题、并能与现有系统共存的技术。在Swift大行其道的今天,每一个iOS开发者都应该记得,在那座金碧辉煌的苹果宫殿之下,埋藏着Objective-C打下的地基。它不完美,但它真实。 ## 参考资料 - [Brad Cox - Wikipedia](https://en.wikipedia.org/wiki/Brad_Cox_(computer_programmer)) — Objective-C创始人的生平与贡献 - [Tom Love - Wikipedia](https://en.wikipedia.org/wiki/Tom_Love_(computer_scientist)) — Objective-C共同创造者的背景 - [Objective-C - Wikipedia](https://en.wikipedia.org/wiki/Objective-C) — Objective-C的完整历史与语言特性 - [NeXT - Wikipedia](https://en.wikipedia.org/wiki/NeXT) — NeXT公司的兴衰及其对苹果的影响 - [The Story of Objective-C - The Register](https://www.theregister.com/2014/06/04/the_story_of_objective_c/) — 关于Objective-C历史的深度报道 - [Apple’s Objective-C Runtime - Apple Developer](https://developer.apple.com/documentation/objectivec/objective-c_runtime) — 苹果官方文档,解释Objective-C运行时机制 - [Why Objective-C is the Way It Is - Hacker News](https://news.ycombinator.com/item?id=7314678) — 技术社区对Objective-C设计哲学的讨论

发布于 2026/7/4