Martin Odersky 谈 Scala.Net 及 Scala 语言

阅读数:2815 2011 年 9 月 15 日

话题:.NET编程语言ScalaJVM语言 & 开发架构

我们就 Scala.Net(.NET 环境下的 Scala 语言实现)及 Scala 语言本身的话题采访了 Typesafe 公司的主席,首席架构师及联合创始人 Martin Odersky。Martin 是 Scala 编程语言的创始人,也是 EPFL(瑞士领先的技术大学)编程研究组的教授。他在整个职业生涯中一直不断追求着一个目标:让写程序这样一个基础工作变得高效、简单、且令人愉悦。

他可能比世界上任何一个人写过更多的 Java 和 Scala 代码。他编写了 javac,这是目前大部分 Java 程序员所使用的编译器。他也编写了 Scala 编译器 scalac,可谓是 Scala 社区飞速发展的基石。他著有《Programming in Scala》一书,是最畅销的 Scala 书籍。他曾经就职于 IBM 研究院、耶鲁大学、卡尔斯鲁厄大学以及南澳大利亚大学。在此之前,他在瑞士苏黎世联邦理工学院追随 Pascal 创始人 Niklaus Wirth 学习,并于 1989 年获得博士学位。

InfoQ: 其实几年前就有.NET 下的 Scala 实现,但后来却消失了。为什么您觉得为.NET 平台提供 Scala 语言也十分重要?

Martin Odersky: Scala 和.NET 之间的历史问题说来话长,在黑客社区外已经很少谈论了。像 Mikolay Mihaylov 和 Lukas Rytz 这样的独立开发者,还有 EPFL 的 Scala 组成员 Miguel Garcia,都在构建交叉编译器方面做出过很多贡献,他们努力让这个交叉编译器可以在.NET 环境下使用──这样便可让一个可执行的 Scala.NET 程序编译它自身了。Miguel 说这就是“典型的鸡生蛋蛋生鸡问题”。

Scala 对于.NET 来说意义重大,无论是对开发者还是公司来说都一样。开发人员可以用一种语言来应对两个环境,公司也可以把各种稀缺的资源,例如优秀的开发者,从两个分离的平台上节省下来,提高灵活性。

由于 Scala 简介而富有生产力,因此在.NET 平台上使用 Scala,开发人员就能在业界两大主流平台,即 JVM 和.NET 上快速部署程序。.NET 提供了一个良好的集成平台,这样 Scala 和其他许多语言轻松地集成在一起。使用 Scala,你就可以利用现有的.NET 类库和应用程序,而不是全部重写。最终,这意味着.NET 和 JVM 平台上的大量工具和应用程序都可以轻松地相互移植,这对谁都有好处。

InfoQ:您觉得 Scala.Net 会与 F# 竞争吗?

Martin Odersky: 不太会,可能慢慢会产生些竞争。Scala 的能力与 F# 不太一样,这是种面向对象与函数式编程集成的编程风格。.NET 平台上的 Scala 最适合那些想要让程序同时运行在 JVM 和.NET 上的开发人员。大部分已经在用 F# 的人也会继续使用 F#,当然,也可能会有一部分人为了能在 JVM 上运行代码而开始使用 Scala.Net。

InfoQ: 会支持什么版本的 Scala 呢?

Martin Odersky: 会随着 Scala 发展更新至最新版本,.NET 版本可能会有几天延迟,主要是需要额外进行构建和测试。

InfoQ: 具体地说,您是怎样把 Scala 移植到.NET 平台上去的呢?有哪些主要的收获和挑战?

Martin Odersky: 据 Miguel Garcia 所说,主要的挑战之一是 Scala 程序往往大量使用了 JDK 的功能,这些是.NET 平台无法支持的。因此,我们必须让编译器可以为.NET 生成合适的代码。交叉编译器已经不是一件容易的事情了,何况它还依赖了大量 JDK 的 API。

IKVM 是个颇有历史的开源项目,由 Jeroen Frijters 负责,能够把 Java 程序转化至 MSIL,同时也包含一套提供了基本 JDK 支持的.NET 类库,这为 Scala 类库到.NET 的移植奠定了坚实的基础。IKVM 编译器可以把 JVM 二进制码转化为.NET 程序集。这种二进制代码级别的改变固然是重要的一步,但也不能直接成为可执行程序,因为它还是包含一些对 JDK 的依赖。因此剩下的事情,则是构建一个预处理器,把 Scala 代码中对 JDK 的依赖替换成 IKVM 里的.NET 等价物。这主要是一些映射方面的工作。

InfoQ: 现在能不能下载到初始版本?我们大概是怎么在.NET 环境下开发 Scala 的呢?

Martin Odersky: 你可以直接在微软的 Visual Studio 里编写 Scala 程序。这个秋天就会有 Scala 的 Visual Studio 插件了,会包含一些 IDE 的基本功能:代码补全,代码浏览,行断点,表达式断点,还有异常报告等等。

目前的插件还不支持代码补完和代码浏览,所以开发人员会更倾向于使用 Eclipse 或 Intellij 来编写代码,然后用 Visual Studio 进行调试。你可以在这里找到一份“使用指南”和有关 Scala.Net 项目的幻灯片。

目前的实现已经很健壮了。Scala.Net 编译器已经可以编译它自身,这大约有十万行 Scala 代码。

InfoQ: 那么运行在 JVM 和 CLR 上的 Scala 程序是如何互通的呢?

Martin Ordersky: .NET 虚拟机,也就是 CLR,它提供的基本类型可以说是 JVM 的超集,其中还有些记录一般的值类型。从编译器编写者的角度来说,做这种双向的转化都是比较容易的。字符串的转化过程就工作地很好,应该不会有被遗漏的死角,测试还是很完备的。IKVM 也在社区里用了许多年了。

InfoQ: 我们来讨论 Scala 本身吧。如果要您用一句话来描述 Scala,您会怎么说?

Martin Odersky: Scala 是一个简洁的,高生产力的编程语言,混合了面向对象和函数式编程的风格,并可以无缝地与 Java 程序代码集成。

InfoQ: 如果有人打算启动一个 Scala 项目,他的同事需要看一些证明,那么目前最大的 Scala 应用有哪些,分别是做什么的呢?

Martin Odersky: 如今已经有许多使用 Scala 的大型应用程序了,从 NASA 发射控制,到 EDFT 和 Trafigura 的核心业务交易应用程序。还有一些最大的应用每天都有人在用,例如 Twitter,Fouresquare 以及 LinkedIn,这些 Scala 应用程序每天都要处理数十亿的 Web 事务。

InfoQ: 如何说服一个经理,让他信任 Scala 而不是他最喜欢的 Java 平台?

Martin Odersky: 信任 Scala 的原因和信任 Java 平台的原因是一样的。它们都使用同样可靠的 JVM。Scala 编译器也很可靠,它是由 Martin Odersky 开发的,这家伙编写了 javac 参考编译器,你每天都在用它编译 Java 程序。Scala 应用程序和 Java 应用程序可以无缝集成,连部署方式都一样。绝大部分人都可以获得更好的开发效率,更快的项目运作周期,以及更少的维护成本。Typesafe 还提供了商业支持。

InfoQ: 您觉得 Scala 在未来一两年内的主要改变和扩展会是什么呢?

Martin Odersky: 针对 Scala 的研发主要是为了简化开发人员的工作。多核和 GPU 系统虽然都已经存在很久了,但如今的编程模型还很难利用到这些计算能力。程序员还在担心扩展性,同步,竞争,死锁等并发问题。未来的 Scala 会让开发人员使用简单的模型,确保任务可以在单台多核系统上执行,也能适应使用 GPU 类型处理器的异构系统。

目前我们已经有了 Scala 并行集合,程序员只需小小改动现有的 Scala 代码就可以利用多核系统的性能优势。Typesafe 的 Akka 更是极大地简化了分布式处理模型,让您可以使用 Erlang 那样健壮的基于消息的计算。EPFL 和斯坦福大学的联合研究,希望可以让性能有较大飞跃,并简化异构系统的编程模型,还有如机器学习,机械设计,气流模拟,金融风险分析,蒙特卡洛以及其他多种大规模并行计算应用。你可以在未来一到两年内看到 Scala 在这些方面的进展。

InfoQ: 那么从语言和周边生态环境的角度来看,您觉得 Scala 在 5 年后会是什么样子呢?

Martin Ordersky: 我希望它能成为业界广泛使用的编程语言。还有就是,我希望在保持当前发展速度的前提下,Scala 社区也能保持现有的理智和友好。

InfoQ: 对于 Java 的未来您有什么个人看法吗?

Martin Odersky: 看上去 Java 平台会继续统治服务器端。我希望这个平台上能够出现比现在要多得多的编程语言。

InfoQ: 您最近创立了 Typesafe 公司。这个公司的目标和商业模型是怎么样的呢?

Martin Odersky: 公司的目标是为 Scala 的商业用户和社区用户提供最好的产品和支持。它提供开发人员和工具,能够尽可能的简化大规模应用程序的开发。公司的商业模型会基于对开源组件的支持,就像 Red Hat,Spring Source 或 Cloudera 那样。

InfoQ: Martin,感谢您接受采访。

关于受访者

Martin Odersky是 Typesafe 的联合创始人,也是 Scala 编程语言的发明者。Martin 是 EPFL(瑞士领先的技术大学)编程研究组的教授。他在整个职业生涯中一直不断追求着一个目标:让写程序这样一个基础工作变得高效、简单、且令人愉悦。他可能比世界上任何一个人写过更多的 Java 和 Scala 代码。他编写了 javac,这是目前大部分 Java 程序员所使用的编译器。他也编写了 Scala 编译器 scalac,可谓是 Scala 社区飞速发展的基石。他著有《Programming in Scala》一书,是最畅销的 Scala 书籍。他曾经就职于 IBM 研究院、耶鲁大学、卡尔斯鲁厄大学以及南澳大利亚大学。在此之前,他在瑞士苏黎世联邦理工学院追随 Pascal 创始人 Niklaus Wirth 学习,并于 1989 年获得博士学位。

查看英文原文: Scala.Net and Scala with Martin Odersky


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。