Martin Odersky谈Scala.Net及Scala语言

我们就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中文站用户讨论组中与我们的编辑和其他读者朋友交流。

This entry was posted in DSL. Bookmark the permalink.

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s