gpt4 book ai didi

jvm - 为什么我们需要其他 JVM 语言

转载 作者:行者123 更新时间:2023-12-03 11:04:36 29 4
gpt4 key购买 nike

我看到here除了 Java 之外,还有很多语言可以在 JVM 上运行。我对在 JVM 中运行的其他语言的整个概念有些困惑。所以:

为 JVM 使用其他语言有什么优势?

为 JVM 编写语言/编译器需要什么(高级术语)?

您如何在 JVM 中以一种语言(Java 以外的语言)编写/编译/运行代码?

编辑:在接受的答案中回答了 3 个后续问题(最初是评论)。为了便于阅读,它们在此处重印:

用 JPython 编写的应用程序如何与 Java 应用程序交互?

另外,那个 JPython 应用程序可以使用任何 JDK 函数/对象吗??

如果它是 Jaskell 代码,它是一种函数式语言的事实会不会使它与 JDK 不兼容?

最佳答案

分别解决您的三个问题:

What is the advantage in having other languages for the JVM?



这里有两个因素。 (1) 为什么要为 JVM 使用 Java 以外的语言,以及 (2) 为什么要在 JVM 上运行另一种语言,而不是不同的运行时?
  • 其他语言可以满足其他需求。例如,Java 没有对 closures 的内置支持。 ,一个通常非常有用的功能。
  • 在 JVM 上运行的语言与在 JVM 上运行的任何其他语言的字节码兼容,这意味着用一种语言编写的代码可以与用另一种语言编写的库交互。

  • What is required (in high level terms) to write a language/compiler for the JVM?



    JVM 读取字节码 (.class) 文件以获得它需要执行的指令。因此,任何要在 JVM 上运行的语言都需要编译为符合 Sun specification 的字节码。 .这个过程类似于编译成 native 代码,只是代码不是编译成CPU理解的指令,而是编译成JVM解释的指令。

    How do you write/compile/run code in a language (other than Java) in the JVM?



    与您在 Java 中编写/编译/运行代码的方式非常相似。为了弄湿你的脚,我建议你看 Scala ,它在 JVM 上完美运行。

    回答您的后续问题:

    How would an app written in, say, JPython, interact with a Java app?



    这取决于实现选择弥合语言差距。在您的示例中, Jython project有一个简单的方法来做到这一点( see here ):
    from java.net import URL
    u = URL('http://jython.org')

    Also, can that JPython application use any of the JDK functions/objects?



    是的,见上文。

    What if it was Jaskell code, would the fact that it is a functional language not make it incompatible with the 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)
    }
    }

    关于jvm - 为什么我们需要其他 JVM 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/85058/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com