像Jython这样的JVM实现语言是在底层使用Java还是在使用JVM本机?

像Jython这样的JVM实现语言是在底层使用Java还是在使用JVM本机?,java,jvm,language-design,Java,Jvm,Language Design,在使用JVM的语言中,比如Jython、JRuby或任何非Java语言,Java是“底层”使用的语言吗 实施是否意味着: 移植到使用JVM+Java+JVM的语言 例如,Jython是用Java编写的还是使用其他东西来利用JVM?不,它们(在一般情况下)不会编译成Java 例如,Jython将python编译成Java字节码,然后在JVM上运行。这与Java编译的字节码相同,JRuby也是如此。虽然Jython和JRuby本身大部分都是用Java编写的,但实际运行的python/Ruby程序不是

在使用JVM的语言中,比如Jython、JRuby或任何非Java语言,Java是“底层”使用的语言吗

实施是否意味着:

移植到使用JVM+Java+JVM的语言

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

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

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

这取决于具体情况

语言标准库的一部分可以用java实现。编译器/解释器也是如此。其他对引导不重要的部分甚至可以用语言本身编写

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

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

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