我一直在想,如果Scala有任何特定的属性,使得它固有地依赖于JVM,或者如果它可以在别的东西之上可行。我可以看到JVM的无处不在和持续的改进以及Java和Scala之间的互操作性是否是这个战略选择的强有力的论据。不过,据了解,
compromises是在语言设计中制作的。
如果JVM的衰落日子要来,Scala会不会和船一起下去,还是JVM后会有生命?
解决方法
有一个项目使Scala的运行时间为
.NET runtime(停产,
is improving the compiler backend for future versions of Scala工作人员)和
LLVM(卡住)。而且,Scala有几个后端 – Javascript(例如
scala js),所以我可以说在某种意义上可以从JVM中解除Scala。
同时,许多Scala API依赖Java API,许多优化和内部工作都是针对JVM实现的。关于没有JVM,Scala with it’s own virtual machine等的Scala的邮件列表有很多讨论,例如this one,但据我所知,官方声明也是支持非主流JVM(例如Avian),而不是一个自己的运行时。这样Scala可以在iOS和Android(当然也可以使用PC)上运行。
作为Simon Ochsenreither noted,Avian is not just yet-another JVM,与HotSpot相比具有一些明显的优势:
>能够创建本机,独立,可嵌入的二进制文件>在iPhone,Android和其他ARM目标上运行> AOT和JIT编译都完全支持>支持尾部呼叫和延续>一个可理解的代码库>响应维护者>开放改进(价值类,专业化等)