任何人都可以告诉我(或表示某些来源)编译Scala的方式。
我有一些疑问,例如,
- 在编译步骤中,Scala 如何编译 Java 相关的东西?它是否单独使用Java编译器?
- 最终的字节码
.scala
和Java的.class
文件一样吗? - 由于 Sun 被 Oracle 收购,JVM 是否也属于 Oracle?
- 如果有一天 JVM 获得了专有软件,那也会影响 Scala 吗?
如果您愿意,可以查看编译器源代码,但首先查看Martin Odersky 关于编译器内部的演示可能会提供更多信息。
在回答您的具体问题时:
scalac
不会这样做,需要您先javac
手动运行;但是 scalac 可以使用 javac 从 2.7.2 开始在需要的地方编译 Java 文件。Scala 不编译 Java。它对 Java 的了解足以弄清楚类的 API 是什么,但仅此而已。
它希望您使用 java 编译器编译您的 java 文件。
是的。Scala 生成有效的 .class 文件。但是,不可能将该文件转换为 Java 代码,因为有效的类文件允许 Java 不允许或无法表示的内容。
没有“那个”JVM。现有的 JVM 有很多,事实上,Oracle 有自己的专有 JVM。当然,Sun 的 JVM 现在是 Oracle 的了。
一直有许多专有的 JVM,其中之一来自 Oracle。
让我们考虑一个假设的“最坏情况”场景:世界上所有的 JVM 都成为许可(付费)产品或不复存在。当然,Scala 仍然可以在 Dalvik VM 上运行,但我们假设它也已付费或不复存在。
在这种情况下,Scala仍然可以继续存在,但您必须付费才能运行使用 Scala 编译的程序。事实上,由于 Scala 是一个 JVM 程序,你甚至需要付费才能使用编译器!
或者,Scala 可以扩展到其他一些目标平台。Scala 现在有这样的努力,但绝对没有压力让它们成为生产级。如果有必要,它会完成。