Scala的起源 (2009)

发布: (2025年11月30日 GMT+8 03:59)
6 min read

Source: Hacker News

by Bill Venners and Frank Sommers – May 4 2009

摘要

Martin Odersky 与 Bill Venners 讨论了导致 Scala 编程语言诞生的历史。

对编译器的兴趣

Bill Venners: 我们从头说起吧。你是如何第一次接触编程语言的?

Martin Odersky: 我最喜欢的科目一直是编译器和编程语言。1980 年我还是本科生时第一次了解到编译器是什么,我立刻想自己动手做一个。当时我唯一能负担得起的计算机只能是配有 1 KB RAM 的 Sinclair ZX 80。幸运的是,我很快就获得了一台更强大的机器——Osborne‑1——世界上第一台“便携”(可携带)计算机。它配有一块 5 英寸屏幕,每行显示 52 个字符,拥有 56 KB 可用 RAM 和两个 90 KB 的软盘驱动器。

那时我和另一位学生 Peter Sollich 合作,为 8 位 Z80 计算机编写 Modula‑2 编译器。Osborne 只预装了 Microsoft BASIC,缺少带参数的过程,于是我们采用了经典的自举技术:Peter 用 Z80 汇编写了一个极小的 Pascal 子集编译器,我们用它编译稍大一点的语言,再重复该过程,直到能够编译完整的 Modula‑2。最终系统既能生成解释型字节码(当时最紧凑的形式),也能生成本机 Z80 二进制文件。

就在我们快完成时,Borland 发布了 Turbo Pascal 并考虑推出 Modula‑2 产品。他们买下了我们的编译器,作为 Turbo Modula‑2 在 CP/M 上销售,并计划推出 IBM‑PC 版。PC 版被推迟,几年后以 TopSpeed Modula‑2 的名字出现,但由于缺少 Borland 的营销推动,它仍然鲜为人知。

编译器完成后,Borland 向 Peter 和我都提供了工作机会。Peter 接受了;我则留在大学完成课程和一个关于增量解析的硕士项目。那段研究经历促使我在 ETH Zurich 与 Pascal 与 Modula‑2 的发明者 Niklaus Wirth 一起攻读博士。

改进 Java 的工作

Bill Venners: Scala 是怎么来的?它的历史是什么?

Martin Odersky: 大约在 1988/89 年,我在苏黎世时对函数式编程产生了浓厚兴趣。随后我在德国卡尔斯鲁厄成为教授,研究诸如按需求值 λ 演算等理论课题,期间与 Phil Wadler(格拉斯哥大学)合作。Phil 向我介绍了一种新语言 Java,它可移植、基于字节码、面向 Web 并且有垃圾回收机制。他警告说 Java 可能会“把我们埋了”。

于是 Phil 和我决定把函数式思想带入 Java 世界,创建了 Pizza(1996)。Pizza 为 Java 添加了三项函数式特性:泛型、高阶函数和模式匹配。它证明了函数式语言特性可以在 JVM 上实现。

随后我们与 Sun 核心团队的 Gilad Bracha 和 David Stoutamire 合作,推出了 GJ(Generic Java),时间是 1997/98。六年后,GJ 的思想演变为 Java 5 的泛型,随后又加入了通配符(由 Bracha 与奥胡斯的研究人员独立开发)。

Sun 喜欢我们编写的 GJ 编译器;它比他们原来的 javac 更稳定。因此,Sun 在 Java 1.3(2000)发布时将 GJ 编译器作为标准的 javac 采用。

设计比 Java 更好的语言

Martin Odersky: 在 Pizza 和 GJ 的工作期间,我常常感到沮丧:Java 现有的限制阻碍了我想实现的许多设计。专注于改进 Java 之后,我决定从零开始,同时仍利用 JVM 及其库——从无到有的自举在实践上不可行。

成为 EPFL 的教授让我有自由组建一个小型研究团队,而不必不断追逐经费。最初我们走了一条激进的路线,基于 join calculus(一种优美的并发模型)进行构建。我们创建了一个面向对象的版本叫 Functional Nets,以及一种语言叫 Funnel。然而,我们很快意识到 Funnel 的纯粹性使其不适合实际使用,于是不得不重新思考方向…

Back to Blog

相关文章

阅读更多 »

从开源维护者那里得到 NO

Forem 标志 https://media2.dev.to/dynamic/image/width=65,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%...