我一直想知道 Scala 是否有任何特定的属性使其本质上依赖于 JVM,或者它是否可以在其他东西之上可行。我可以看到 JVM 的普遍性和持续改进以及 Java 和 Scala 之间的互操作性如何成为这一战略选择的有力论据。但是,据我了解,出于这个原因,在语言设计上做出了妥协。
如果 JVM 衰落的日子到来,Scala 会随船一起倒下,还是 JVM 之后还有生命?
有一些项目让 Scala 在.NET 运行时(已停产,从事该项目的人正在改进 Scala 未来版本的编译器后端)和LLVM(卡住)。此外,Scala -> Javascript 有几个后端(例如scala js),所以我想说在某种意义上可以将 Scala 从 JVM 中解开。
同时,许多 Scala API 依赖于 Java API,许多优化和内部工作都是针对 JVM 实现的。关于没有 JVM的 Scala上的邮件列表,Scala 有自己的虚拟机等等,有很多讨论,例如这个,但据我所知,官方声明也是支持非主流 JVM(Avian for例如),而不是拥有自己的运行时。这样 Scala 可以在 iOS 和 Android(当然还有 PC)上运行。
正如Simon Ochsenreither 所指出的,Avian 不仅是另一个 JVM,而且与 HotSpot 相比具有一些明显的优势: