← 返回故事列表

小物件的大革命:Smalltalk-80如何用“消息传递”重塑计算机的基因

时代:1980
阅读时间:8 分钟
浏览:5
点赞:0

1980年,美国加州帕洛阿尔托研究中心(Xerox PARC)的一间实验室里,一群程序员正面对着一台看似普通却暗藏玄机的电脑。屏幕上,不是传统的命令行,而是一个用鼠标拖拽的窗口世界。他们正在测试的,是一个名为Smalltalk-80的编程系统——它试图用“一切皆对象”的理念,颠覆人们对计算机的认知。

# 小物件的大革命:Smalltalk-80如何用“消息传递”重塑计算机的基因 1980年,美国加州帕洛阿尔托研究中心(Xerox PARC)的一间实验室里,一群程序员正面对着一台看似普通却暗藏玄机的电脑。屏幕上,不是传统的命令行,而是一个用鼠标拖拽的窗口世界。他们正在测试的,是一个名为Smalltalk-80的编程系统——它试图用“一切皆对象”的理念,颠覆人们对计算机的认知。然而,这项技术的命运却充满了戏剧性:它诞生于商业巨头的实验室,却未能被商业巨头推向市场;它启发了苹果和微软的图形界面,却最终沦为“被遗忘的奠基者”。这个故事,是关于一次技术突破如何因组织僵化而折戟,又如何在开源与学术圈中涅槃重生。 ## 从Simula到“思想病毒”:一场关于对象的哲学革命 Smalltalk-80的起源,可以追溯到1970年代初的Xerox PARC。当时,计算机科学家艾伦·凯(Alan Kay)深受生物学、教育学和艺术的影响,梦想创造一种“像生物细胞一样自洽”的编程语言。他提出“元语言”概念——语言本身应能描述自己,就像DNA能编码生命。但真正的技术挑战在于:如何让代码像活细胞一样,通过“消息传递”而不是“函数调用”来协作? 1972年,凯与丹·英戈尔斯(Dan Ingalls)等人开始开发Smalltalk的早期版本。灵感来自挪威的Simula语言——它是第一个引入“类”和“对象”的语言,但Simula的语法笨重,像披着COBOL外衣的面向对象系统。凯决心打造一个纯粹的面向对象系统:每个值都是对象,每个操作都是消息。这意味着,整数、字符串、甚至类本身,都必须被设计成能够响应消息的实体。 到了1978年,Adele Goldberg加入团队并主导了Smalltalk-80的标准化工作。她面临的不仅是技术难题,还有组织阻力:Xerox的管理层更关注复印机业务,对“图形界面”和“面向对象”这类概念缺乏远见。Goldberg后来回忆:“我们不得不偷偷在晚上加班,因为白天要应付那些认为我们‘在做玩具’的经理。” 技术上的核心突破在于“虚拟映像(image)”和“字节码”的设计——Smalltalk的整个开发环境、所有对象和状态,都保存在一个内存映像中,运行时通过虚拟机执行字节码。这种设计使得代码可以热更新、对象可以持久化,远比当时C语言的分步编译模式更灵活。但代价是性能低下:Smalltalk-80在当时的机器上运行缓慢,被嘲笑为“会说话的乌龟”。 ## 窗口、鼠标与“被偷走的未来”:PARC的失策与苹果的窃喜 1979年,一场改变历史的演示在PARC上演。史蒂夫·乔布斯(Steve Jobs)受邀参观Smalltalk-80系统,当他看到用鼠标拖拽窗口、点击按钮运行程序时,激动得在房间里来回踱步。他后来回忆:“那是我一生中见过的最完美的设计。” 苹果公司迅速从PARC“借走”了关键工程师,包括比尔·阿特金森(Bill Atkinson),后者将Smalltalk的GUI思想转化为Macintosh的图形界面。与此同时,微软也从PARC获得了启示,开发了Windows。 然而,Xerox PARC的领导者们并未意识到Smalltalk的价值。他们曾试图将Smalltalk-80授权给第三方,但定价高昂——每份许可证5万至10万美元,且要求购买专用硬件。讽刺的是,PARC内部甚至有人建议将Smalltalk的“对象”概念申请专利,但被法律部门驳回,理由是“抽象概念不可专利”。 这种官僚主义与短视,直接导致了Smalltalk的商业化失败。 转折点发生在1981年,Smalltalk-80的完整系统被公开出版(《Smalltalk-80: The Language and its Implementation》),源代码通过MIT等学术机构传播。这实际上是一次“被迫开源”——PARC无力维护,索性将系统扔给学术界。出乎意料的是,Smalltalk的“元编程”特性引发了热潮:程序员们发现,Smalltalk的类库可以动态修改,甚至可以在运行时创建新类。这种灵活性启发了后来的Ruby(松本行弘曾坦言Smalltalk是其灵感来源)和Python的“鸭子类型”。而Smalltalk的“集成开发环境”概念——代码编辑器、调试器、对象浏览器整合在一个窗口中——直接催生了Eclipse、Visual Studio等现代IDE。 但最大的遗产在于“设计模式”。1994年,四位作者(GoF)在《设计模式》一书中,大量引用了Smalltalk-80的类和消息传递模式,例如“观察者模式”源于Smalltalk的依赖机制,“组合模式”源于其图形系统。可以说,没有Smalltalk-80,就没有如今面向对象编程的基石。 ## 被遗忘的“文化冲击”:为什么Smalltalk会输给C++? Smalltalk-80在商业上的失败,并非技术原因,而是文化冲突。1980年代,主流编程语言是C和Pascal,强调“效率”和“控制”。Smalltalk的“消息传递”开销巨大——每个方法调用都要经过动态分派,比C的函数指针调用慢数十倍。而C++虽然也引入了面向对象,但保留了C的底层操作能力,性能更优。更重要的是,C++可以“渐进式迁移”:程序员可以先用C写程序,再逐步加入类。Smalltalk却要求“全盘接受”——你必须使用它的虚拟机、类库和IDE,这吓退了保守的企业。 另一个致命伤是“封闭生态”。Smalltalk-80的虚拟机只运行在PARC的专用硬件(如Alto、Dorado)上,无法移植到IBM PC或Apple II。当IBM PC在1981年横扫市场时,Smalltalk还困在实验室里。直到1987年,第三方公司才开发出PC版Smalltalk,但为时已晚——微软的Windows 2.0已经崛起,而Java(1995)和JavaScript(1995)成为了新一代面向对象语言的代表。 然而,Smalltalk的“思想病毒”并未消失。1990年代,Kent Beck和Ward Cunningham将Smalltalk的“快速迭代”理念提炼为“极限编程(XP)”,强调测试驱动开发、持续重构。而Smalltalk的“对象浏览器”成为了现代IDE的标配。如今,Python的“一切皆对象”和Ruby的“开放类”都直接继承自Smalltalk的哲学。就连苹果的Swift语言,也在其“协议扩展”中暗合了Smalltalk的“消息传递”精神。 ## 评论 Smalltalk-80的故事是一个关于“技术超前于时代”的经典案例。它深刻揭示了技术突破与商业成功之间的鸿沟:创新的本质不在于发明新东西,而在于让新东西变得“理所当然”。PARC的工程师们太专注于“完美”的设计,却忽略了“可用性”和“生态”——一个需要专用硬件、昂贵许可证、且无法兼容现有代码的系统,注定只能成为博物馆里的展品。但更值得反思的是组织文化:Xerox的管理层并非不聪明,而是被“复印机”的成功经验所束缚,无法理解“软件”作为独立产品的价值。这种“创新者的窘境”(克里斯坦森语)至今仍在重演:柯达发明了数码相机却死于数码时代,诺基亚发明了触控屏却被智能手机淘汰。Smalltalk-80的遗产不仅是技术,更是一个警示:当你拥有改变世界的工具时,你必须同时拥有改变自己的勇气。 ## 参考资料 - [Smalltalk-80: The Language and its Implementation](https://en.wikipedia.org/wiki/Smalltalk-80) — Wikipedia页面,详细介绍了Smalltalk-80的语法、类库和虚拟机设计 - [Adele Goldberg - Personal History](https://www.dmh2000.com/smalltalk/goldberg.html) — Adele Goldberg的个人传记,包含她在PARC的工作经历 - [The Xerox PARC Smalltalk-80 System](https://www.computerhistory.org/revolution/computer-graphics-music-and-art/15/223) — 计算机历史博物馆的PARC展览,包含Smalltalk-80的原始截图和演示视频 - [Design Patterns: Elements of Reusable Object-Oriented Software](https://en.wikipedia.org/wiki/Design_Patterns) — 维基百科条目,解释了Smalltalk-80对设计模式的影响 - [Alan Kay's Vision for Smalltalk](https://www.quora.com/What-was-Alan-Kays-vision-for-Smalltalk) — Quora问答,收录了Alan Kay关于Smalltalk设计理念的阐述

发布于 2026/7/4