分别解决您的三个问题:
为 JVM 提供其他语言有什么好处?
这里有两个因素。(1) 为什么 JVM 有 Java 以外的语言,以及 (2) 为什么在 JVM 上运行另一种语言,而不是不同的运行时?
- 其他语言可以满足其他需求。例如,Java 没有对闭包的内置支持,这个特性通常非常有用。
- 在 JVM 上运行的语言是与在 JVM 上运行的任何其他语言兼容的字节码,这意味着用一种语言编写的代码可以与用另一种语言编写的库进行交互。
为 JVM 编写语言/编译器需要什么(高级术语)?
JVM 读取字节码 (.class) 文件以获取它需要执行的指令。因此,任何要在 JVM 上运行的语言都需要编译为符合Sun 规范的字节码。此过程类似于编译为本机代码,不同之处在于不是编译为 CPU 可以理解的指令,而是将代码编译为 JVM 解释的指令。
您如何在 JVM 中以一种语言(Java 除外)编写/编译/运行代码?
与您在 Java 中编写/编译/运行代码的方式非常相似。为了让您的脚湿透,我建议您查看Scala,它可以在 JVM 上完美运行。
回答您的后续问题:
使用 JPython 编写的应用程序如何与 Java 应用程序交互?
这取决于实现选择弥合语言差距。在您的示例中,Jython 项目有一种直接的方法来执行此操作(请参见此处):
from java.net import URL
u = URL('http://jython.org')
此外,该 JPython 应用程序可以使用任何 JDK 函数/对象吗?
是的,见上文。
如果它是 Jaskell 代码,它是一种函数式语言这一事实是否不会使其与 JDK 不兼容?
不。例如,Scala(上面的链接)实现了功能特性,同时保持与 Java 的兼容性。例如:
object Timer {
def oncePerSecond(callback: () => unit) {
while (true) { callback(); Thread sleep 1000 }
}
def timeFlies() {
println("time flies like an arrow...")
}
def main(args: Array[String]) {
oncePerSecond(timeFlies)
}
}