针对.NET 的 Scala 交叉编译

  • Jonathan Allen
  • 张龙

2011 年 7 月 31 日

话题:Java.NETScala语言 & 开发

Java 平台的流行语言 Scala 现在准备进军.NET 了,这要归功于école Polytechnique Fédérale de Lausanne发起的项目,该项目还得到了微软的资助。这个项目主要使用了 Jeroen Frijters 的IKVM,它是一个运行在 CLR(.NET 与 Mono)之上的 Java 虚拟机。

早在 2006 年 InfoQ 成立之际,我们就一直在报道 Scala 相关的新闻,那时的 Scala 每个月只有可怜的 1,000 个下载量。从那时起,Scala 就在 Java 世界中展开了狂风暴雨般的攻势,一些知名的站点如 Twitter 就使用 Scala 构建后端系统。甚至连欧洲研究委员会也开始资助 Scala。

最初,Scala 提供了对.NET 平台的支持,但后续就没人维护了,最后一个公开发布版使用的还是 Scala 1.4,现在已经无从寻觅了。来自 EPFL 的 Miguel Garcia说到

交叉编译器非常棒,但却只能运行在 JDK 上。其源代码严重依赖于 JDK API。这是典型的 Scala 应用的做法。Scala 程序员们依旧在大量使用 JDK 提供的特性,但很多时候 Scala SDK 也提供了相同的功能。我们拥有交叉编译器,但却没有办法通过调用.NET 环境中的库来自动替换掉对 JDK 的依赖。

Scala 真正需要的是能以自动化的方式通过 IKVM 库替换掉对 JDK 的依赖。Miguel Garcia 继续说到:

第一步是创建一个源代码级别的初始转换集合。接下来扩展 Scala 编译器以应用这些转换。但并不是所有编译器都足够灵活到可以提供这些服务。Scala 编译器的模块化做的非常好,并且还支持插件,因此使用起来就会容易得多。新的 Scala 插件 JDK2IKVM 就可以批处理的方式应用这些源代码级别的转换。接下来,生成的源代码再经过其他标准的编译器编译并使用 IKVM 库引用来生成 MSIL 字节码。这样,Scala.Net 就诞生了,它可以编译自身。

EPFL 的 Scala 小组还计划为 Scala 提供一个 Visual Studio 插件。

你可以直接在 MS Visual Studio 中开发 Scala 程序。今秋将要发布的 Visual Studio Scala 插件将会支持 IDE 的一些基本功能,如代码完成、代码浏览、换行符、表达式及异常报告等等。然而短期来看,目前的插件还不支持代码完成与代码浏览。出于这个原因,一些开发者可能更愿意使用 Eclipse 或 Intellij 在 JVM 上编写代码,然后在 Visual Studio 中进行最后的调试。感兴趣的读者可以查看“上手”指南以及关于 Scala.Net 项目的介绍。

查看英文原文:Cross-Compiling Scala for .NET

Java.NETScala语言 & 开发