1

任何人都可以告诉我(或表示某些来源)编译Scala的方式。

我有一些疑问,例如,

  • 在编译步骤中,Scala 如何编译 Java 相关的东西?它是否单独使用Java编译器?
  • 最终的字节码.scala和Java的.class文件一样吗?
  • 由于 Sun 被 Oracle 收购,JVM 是否也属于 Oracle?
  • 如果有一天 JVM 获得了专有软件,那也会影响 Scala 吗?
4

2 回答 2

6

如果您愿意,可以查看编译器源代码,但首先查看Martin Odersky 关于编译器内部的演示可能会提供更多信息。

在回答您的具体问题时:

  • 是的。早期版本scalac不会这样做,需要您先javac手动运行;但是 scalac 可以使用 javac 从 2.7.2 开始在需要的地方编译 Java 文件
  • 肯定是一样的格式 取决于您在 Scala 中所做的确切工作,它可能不会为“等效”事物产生完全相同的 JVM 操作,但它完全符合字节码规范(这就是它可以在 JVM 上运行的原因)。
  • 是的,无论您是指JVM 规范,还是实际的 vm 实现(JRE 下载)。
  • 我不确定您所说的“财产”究竟是什么意思。但我怀疑,就你所问的而言,答案是否定的。Scala 编译成标准字节码格式的 Java 类文件。在运行时,用 Scala 编写的代码/类与用 Java 编写的代码/类之间没有区别。因此,任何从根本上阻止 Scala 代码在这些 JVM 上运行的东西也会阻止 Java 代码运行。
于 2012-09-03T12:05:41.270 回答
5
  • 在编译步骤中,Scala 如何编译 Java 相关的东西?

Scala 不编译 Java。它对 Java 的了解足以弄清楚类的 API 是什么,但仅此而已。

  • 它是否单独使用Java编译器?

它希望您使用 java 编译器编译您的 java 文件。

  • .scala 的最终字节码是否与 Java 的 .class 文件相同?

是的。Scala 生成有效的 .class 文件。但是,不可能将该文件转换为 Java 代码,因为有效的类文件允许 Java 不允许或无法表示的内容。

  • 由于 Sun 被 Oracle 收购,JVM 是否也属于 Oracle?

没有“那个”JVM。现有的 JVM 有很多,事实上,Oracle 有自己的专有 JVM。当然,Sun 的 JVM 现在是 Oracle 的了。

  • 如果有一天 JVM 获得了专有软件,那也会影响 Scala 吗?

一直有许多专有的 JVM,其中之一来自 Oracle。

让我们考虑一个假设的“最坏情况”场景:世界上所有的 JVM 都成为许可(付费)产品或不复存在。当然,Scala 仍然可以在 Dalvik VM 上运行,但我们假设它也已付费或不复存在。

在这种情况下,Scala仍然可以继续存在,但您必须付费才能运行使用 Scala 编译的程序。事实上,由于 Scala 是一个 JVM 程序,你甚至需要付费才能使用编译器!

或者,Scala 可以扩展到其他一些目标平台。Scala 现在有这样的努力,但绝对没有压力让它们成为生产级。如果有必要,它会完成。

于 2012-09-04T00:27:43.720 回答