JVM 实现的语言(如 Jython)是在下面使用 Java 还是使用 JVM 本机语言?

Are JVM implemented languages like Jython using Java underneath or are they using the JVM native?

在使用 JVM 的语言中,例如 Jython、JRuby 或任何非 Java 的语言,Java 是在某处使用的语言 "underneath" 吗?

实施是否意味着:

Language Ported to use the JVM + Java somewhere + JVM?

例如,Jython 是用 Java 编写的还是使用其他东西来利用 JVM?

不,他们不会(在一般情况下)编译成 Java。

例如,Jython 将 python 编译为 Java 字节码,然后在 JVM 上 运行。这与 Java 编译成的字节码相同,JRuby 也是如此。虽然 Jython 和 JRuby 本身大部分都是用 Java 编写的,但实际的 python/Ruby 程序 运行 并没有编译为 Java,而是立即编译为 Java字节码。

视情况而定。

部分语言的标准库可能会在 java 中实现。 compiler/interpreter 同上。其他对于引导程序不是必需的部分甚至可以用语言本身编写。

用户代码本身最初可能是 运行 通过解释器但后来编译成字节码。此外,可以根据在 运行 时间内收集的类型配置文件进一步优化生成的字节码。如果字节码的某些假设无效,则字节码可能会返回给解释器。这类似于热点的 interpreter/c1/c2 层和许多其他 JIT 环境,尽管抽象级别更高。

但是解释器+JIT只是一种可能的方法。例如 Scala 是 AOT 编译成字节码的。

并且他们还可以使用 C 绑定来实现各自语言的标准库的函数,这些函数没有 1:1 映射到 JDK 标准库。