← 返回故事列表

奥斯陆的代码之火:Simula 67如何用“对象”点燃了一场软件革命

时代:1967
阅读时间:9 分钟
浏览:4
点赞:0

1967年,在挪威奥斯陆一个不起眼的计算中心里,两位数学家正面临一个看似无解的难题:他们试图用计算机模拟复杂的真实系统——机场的客流、网络的拥堵、核电站的调度——却发现现有的编程语言根本无法优雅地表达这些“实体”之间的互动。Ole-Johan Dahl 和 Kristen Nygaard 不知道的是

# 奥斯陆的代码之火:Simula 67如何用“对象”点燃了一场软件革命 1967年,在挪威奥斯陆一个不起眼的计算中心里,两位数学家正面临一个看似无解的难题:他们试图用计算机模拟复杂的真实系统——机场的客流、网络的拥堵、核电站的调度——却发现现有的编程语言根本无法优雅地表达这些“实体”之间的互动。Ole-Johan Dahl 和 Kristen Nygaard 不知道的是,他们即将创造的东西,将彻底改变软件工程的未来。但首先,他们得说服一个对“商业回报”毫无耐心的世界,为什么“对象”比“过程”更值得投资。这是一个关于技术理想主义与商业现实碰撞的故事,也是一粒种子如何默默生长,最终撑破整个编程世界的故事。 ## 起源:一场模拟的噩梦与一个疯狂的想法 故事要从1960年代初说起。Kristen Nygaard 是挪威计算中心(Norsk Regnesentral)的一位研究员,他受命研究如何用计算机模拟复杂的“排队系统”——比如,如何优化奥斯陆机场的客流,或者预测电话网络的拥堵情况。当时,主流的编程语言是 Fortran 和 ALGOL,它们擅长处理数学计算,但面对“多个独立实体同时互动”的场景,却显得笨拙不堪。Nygaard 发现,每当他试图模拟一个“乘客”或“电话呼叫”时,他必须手动跟踪大量状态变量,代码很快变成一堆难以维护的意大利面条。 “我们需要的是一种方式,让代码里的每个元素都像一个真实世界中的‘东西’——它有自己的属性、行为,还能和其他‘东西’通信。”Nygaard 后来回忆道。他找到了同事 Ole-Johan Dahl,一位同样对计算机语言理论着迷的数学家。两人一拍即合,决定在 ALGOL 60 的基础上,设计一种全新的“模拟语言”。 最初的灵感来自“模拟实体”——他们将每个模拟对象(比如“一架飞机”或“一个乘客”)视为一个独立的“单元”,拥有自己的数据和操作。这个想法听起来简单,但实现起来却异常困难。当时的计算机内存极小,编译器笨重,而 Dahl 和 Nygaard 却在试图引入两个前所未有的概念:**类**(Class)和**继承**(Inheritance)。 “类”允许程序员定义一种“模板”,比如“飞机”类,包含所有飞机的通用属性(速度、载客量、航班号)和行为(起飞、降落)。而“继承”则允许你从“飞机”类派生出“波音747”子类,自动获得所有基础属性,再添加自己的特殊功能。这听起来就像生物学的“种属分类”——Dahl 和 Nygaard 后来承认,他们确实受到了生物学分类法的启发。 但技术和商业的挑战接踵而至。首先,当时的计算机界对“模拟”的需求并不普遍;大多数程序员仍在编写批处理脚本或科学计算程序。其次,Dahl 和 Nygaard 所在的挪威计算中心是一个非营利研究机构,资金紧张,而他们的项目需要大量人力和机器时间。Nygaard 曾试图向挪威政府和企业推销这个语言,但得到的回应大多是:“我们只需要 Fortran,为什么要学一种新语言?” 尽管如此,两人坚持了下来。1965年,他们发布了第一个版本,名为“Simula I”(Simulation Language 1)。它虽然能工作,但语法相当古怪,且只支持模拟功能。真正的大转折发生在1967年:他们彻底重写了语言,将其从“模拟工具”升级为“通用编程语言”,并正式命名为 **Simula 67**。这一年,面向对象编程的种子被埋进了冻土里。 ## 高潮:商业的寒冬与思想的燎原 Simula 67 的正式发布,在当时的软件界并没有引起太大波澜。它被看作是一个“学术玩具”——一个来自北欧小国的奇怪语言,既没有大型商业公司的背书,也没有杀手级应用。Dahl 和 Nygaard 曾尝试将 Simula 商业化,但结果令人沮丧。他们联系了 IBM、DEC 等公司,对方要么礼貌拒绝,要么表示“我们看不到市场”。挪威计算中心也面临压力:管理层希望他们做更“务实”的项目,比如操作系统的开发,而不是继续在“编程语言”这种虚无缥缈的东西上烧钱。 然而,Simula 67 真正的力量在于它的设计。它引入了如今我们视为理所当然的面向对象核心机制:**类、继承、动态绑定、引用、垃圾回收**(是的,Simula 67 已经实现了自动内存管理)。程序员可以用“对象”来直接映射现实世界中的实体,代码变得可读、可扩展、可复用。Dahl 和 Nygaard 在1970年出版的《Simula 67 Common Base Language》手册中写道:“我们希望编程语言能成为人类思维的自然延伸,而不是机器的奴隶。” 但商业上的失败几乎是注定的。Simula 67 的编译器和运行时环境极其庞大,对当时内存只有几十KB的计算机来说几乎是灾难;它的学习曲线陡峭,缺乏像样的文档和培训支持;更重要的是,它诞生的时机太早了——面向对象的思想远远超前于它所处的时代。到1970年代末,Simula 67 几乎从主流视野中消失,只有北欧的大学和研究机构还在使用它。 然而,就像暗夜中的萤火虫,Simula 67 的光芒被少数几个天才看到了。1972年,美国施乐帕克研究中心(Xerox PARC)的 Alan Kay 在阅读了 Simula 67 的文档后,深受震撼。他后来写道:“Simula 67 让我明白了什么是真正的对象——它不仅是数据加函数,而是一个完整的、有生命力的实体。” Kay 将 Simula 的思想融入了 Smalltalk 语言,并创造了“面向对象编程”这个术语。 随后,Bjarne Stroustrup 在1980年代设计 C++ 时,也明确承认受到了 Simula 67 的直接影响。Stroustrup 说:“Simula 67 的‘类’概念给了我极大的启发,但它的性能太差了。C with Classes(后来的 C++)就是试图在 Simula 的优雅和底层性能之间找到平衡。” 再后来,Java、Python、Ruby、C# 等语言都或多或少地从 Simula 67 的遗产中汲取营养。毫不夸张地说,今天几乎所有现代编程语言中“类”和“继承”的语法,都可以追溯到1967年奥斯陆的那个冬天。 ## 影响:改变世界的“失败者” Simula 67 在商业上是一个彻底的失败——它从未获得过主流市场的认可,也没有为挪威计算中心带来任何直接收入。但它的遗产却比任何成功的商业软件都要深远。可以说,Simula 67 是软件史上最“成功”的失败产品。 首先,它定义了“面向对象编程”这一范式。在此之前,程序员思考的是“过程”(procedure)和“数据”(data),两者是割裂的;而 Simula 67 教会我们以“对象”为中心,将数据和操作封装在一起。这种思维方式深刻影响了软件工程的方方面面:从大型企业级系统(Java EE、.NET)到移动应用(iOS、Android),从游戏引擎(Unity、Unreal)到人工智能框架(PyTorch、TensorFlow),背后都有面向对象思想的影子。 其次,Simula 67 的故事揭示了技术创新的一个残酷真相:**最好的技术不一定能立刻赢得市场,但它可能通过影响下一代技术而改变世界**。Dahl 和 Nygaard 没有成为富翁,但他们在2001年获得了图灵奖(计算机科学界的诺贝尔奖)。颁奖词中写道:“他们设计了第一个面向对象编程语言,引入了类、继承和动态绑定,为整个软件工程领域奠定了基石。” 更令人感慨的是,Simula 67 的失败也与商业生态密切相关。当时的软件行业被 IBM 等巨头主导,市场偏好“标准化”和“向后兼容”,而 Simula 67 作为一种激进的新语言,缺乏生态支持。如果 Dahl 和 Nygaard 当年有风险投资的支持,或者能说服一家大型公司将其商业化,历史可能会完全不同。但正是这种“非商业化”的纯粹性,让 Simula 67 保持了学术上的完美,成为后来者的灵感源泉。 ## 评论 Simula 67 的故事本质上是一个关于“时机”的寓言。它完美地展示了技术史上一个常见的悖论:当一项创新远远超前于它所处的时代时,它往往会被市场忽视,甚至嘲笑。Simula 67 的“失败”与后来 Smalltalk、C++、Java 的成功形成了鲜明对比——这并非技术本身的优劣,而是生态、资本和时机的综合作用。对于今天的创业者来说,Simula 67 的教训是:技术创新固然重要,但如果你不能找到一个“痛点”让用户今天就需要它,如果你没有能力构建一个完整的开发者生态(包括工具、文档、社区),那么即使你的代码再优雅,也可能只是昙花一现。然而,从更宏大的视角看,Simula 67 证明了另一种价值:**有些种子是种给未来的**。Dahl 和 Nygaard 的贡献不在于他们卖出了多少份软件,而在于他们改变了我们思考问题的方式——让代码从“如何让机器工作”转向“如何让机器理解人类的世界”。这种思维范式的转变,远比任何商业成功都更珍贵。 ## 参考资料 - [Simula - Wikipedia](https://en.wikipedia.org/wiki/Simula) — 全面的 Simula 历史介绍,包括设计理念和影响 - [Ole-Johan Dahl 和 Kristen Nygaard 的图灵奖获奖演讲](https://amturing.acm.org/award_winners/dahl_6911772.cfm) — 两位创始人对 Simula 67 设计哲学的原始阐述 - [The Birth of Object-Oriented Programming: Simula 67](https://www.computerhistory.org/revolution/programming-languages/10/228) — 计算机历史博物馆的专题文章 - [Bjarne Stroustrup 谈 Simula 对 C++ 的影响](https://www.stroustrup.com/hopl2.pdf) — C++ 创始人的回忆录,详细分析了 Simula 的继承机制 - [Alan Kay 关于 Smalltalk 与 Simula 的回忆](https://www.dreamsongs.com/Files/HistoryOfSmalltalk.pdf) — Alan Kay 的经典论文,描述了 Simula 如何启发 Smalltalk

发布于 2026/7/4