Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以为JVM构建定制语言,比如Groovy、Scala、Clojure、Kotlin?_Jvm_Jvm Languages - Fatal编程技术网

为什么可以为JVM构建定制语言,比如Groovy、Scala、Clojure、Kotlin?

为什么可以为JVM构建定制语言,比如Groovy、Scala、Clojure、Kotlin?,jvm,jvm-languages,Jvm,Jvm Languages,这些语言在很多方面与Java不同,比如OO系统、类型系统(最显著) 实际的问题是JVM是否跟踪引擎罩下的对象?JVM中有对象吗?这些语言的创建者是否有责任与Java world进行互操作,还是“默认”实现了互操作?所有JVM语言都编译为“Java字节码”。实际上,JVM对编程语言Java没有任何概念。JVM规范是一个“类文件”,它必须满足某些规则。只要您提供由编译器创建的兼容类文件,例如,您的代码将在JVM上运行。例如,科特林就是这样做的 实际的问题是JVM是否跟踪引擎罩下的对象 是的。垃圾收集

这些语言在很多方面与Java不同,比如OO系统、类型系统(最显著)


实际的问题是JVM是否跟踪引擎罩下的对象?JVM中有对象吗?这些语言的创建者是否有责任与Java world进行互操作,还是“默认”实现了互操作?

所有JVM语言都编译为“Java字节码”。实际上,JVM对编程语言Java没有任何概念。JVM规范是一个“
文件”,它必须满足某些规则。只要您提供由编译器创建的兼容
文件,例如,您的代码将在JVM上运行。例如,科特林就是这样做的

实际的问题是JVM是否跟踪引擎罩下的对象

是的。垃圾收集是JVM的责任

JVM中有对象吗

是的,有字节码来创建类实例。此外,实例方法的动态分派由JVM完成

这类语言的创建者有责任与Java world进行互操作,还是“默认”实现的


这是低垂的果实,不这样做是愚蠢的。此外,并非所有的JVM语言都会重新发明轮子,在适当的时候只使用JRE类。这很可能包括字符串、基本类型及其装箱形式和数组。

这些语言(AFAIK)最终都会编译成字节码。你的问题与问Visual Basic和C++在Windows操作系统上运行的可能性没有什么不同。如果你想读到它,我在博客上解释了:作为一个补充,java字节码中的所有显式内存分配都可以创建一个等价于java对象的对象,因此,如果JVM语言对对象有不同的概念,那么它必须在此基础上实现它。如果语言有局部对象的概念,如果不需要引用或地址指针,它可能会在局部变量上实现它们。