为什么可以为 JVM 构建自定义语言,例如 Groovy、Scala、Clojure、Kotlin?
Why it is possible to build custom language for JVM, like Groovy, Scala, Clojure, Kotlin?
这些语言在重要方面与 Java 不同,例如 OO 系统、类型系统(最值得注意)。
真正的问题是 JVM 是否在幕后跟踪对象? JVM里面有object吗?此类语言的创建者是否有责任与 Java 世界进行互操作,或者实现了 "by default"?
所有 JVM 语言都编译为 "Java Byte Code"。实际上,JVM 对编程语言Java一无所知。 JVM 规范 specifies 一个“class
文件”,它必须满足某些规则。只要您提供由编译器创建的兼容 class
文件,例如,您的代码将 运行 在 JVM 上。例如,这就是 Kotlin 所做的。
The actual question is whether JVM keeps track of objects under the hood?
是的,确实如此。垃圾收集是 JVM 的责任。
Is there an object inside JVM?
是的,有创建 class 个实例的字节代码。此外,实例方法的动态调度由 JVM 完成。
Is it responsibility of creators of such languages that they may interoperate with Java world, or it is achieved "by default"?
这是唾手可得的成果,不去做是愚蠢的。此外,并不是所有的 JVM 语言都重新发明轮子,只在适当的时候使用 JRE classes。这很可能包括字符串、基本类型及其盒装形式和数组。
这些语言在重要方面与 Java 不同,例如 OO 系统、类型系统(最值得注意)。
真正的问题是 JVM 是否在幕后跟踪对象? JVM里面有object吗?此类语言的创建者是否有责任与 Java 世界进行互操作,或者实现了 "by default"?
所有 JVM 语言都编译为 "Java Byte Code"。实际上,JVM 对编程语言Java一无所知。 JVM 规范 specifies 一个“class
文件”,它必须满足某些规则。只要您提供由编译器创建的兼容 class
文件,例如,您的代码将 运行 在 JVM 上。例如,这就是 Kotlin 所做的。
The actual question is whether JVM keeps track of objects under the hood?
是的,确实如此。垃圾收集是 JVM 的责任。
Is there an object inside JVM?
是的,有创建 class 个实例的字节代码。此外,实例方法的动态调度由 JVM 完成。
Is it responsibility of creators of such languages that they may interoperate with Java world, or it is achieved "by default"?
这是唾手可得的成果,不去做是愚蠢的。此外,并不是所有的 JVM 语言都重新发明轮子,只在适当的时候使用 JRE classes。这很可能包括字符串、基本类型及其盒装形式和数组。