【问题标题】:Why it is possible to build custom language for JVM, like Groovy, Scala, Clojure, Kotlin?为什么可以为 JVM 构建自定义语言,例如 Groovy、Scala、Clojure、Kotlin?
【发布时间】:2017-10-21 06:04:16
【问题描述】:

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

实际的问题是 JVM 是否在后台跟踪对象? JVM 内部有 object 吗?这些语言的创建者有责任与 Java 世界互操作,还是“默认”实现?

【问题讨论】:

  • 这些语言(AFAIK)最终都编译成字节码。您的问题与询问如何在 Windows 操作系统上同时运行 Visual Basic 和 C++ 没有什么不同。

标签: jvm jvm-languages


【解决方案1】:

实际的问题是 JVM 是否在后台跟踪对象?

是的,确实如此。垃圾回收是 JVM 的职责。

JVM里面有对象吗?

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

这些语言的创建者有责任与 Java 世界互操作,还是“默认”实现?

这是唾手可得的成果,不这样做是愚蠢的。此外,并非所有 JVM 语言都重新发明轮子,只在适当的时候使用 JRE 类。这很可能包括 String、原始类型及其装箱形式和数组。

【讨论】:

  • 另外,所有可用于 Java 字节码的显式内存分配都会导致创建与 Java 对象等效的对象,因此,如果 JVM 语言对对象的概念有不同的看法,它必须在此基础上实施它。如果该语言有局部对象的概念,它可能会在局部变量之上实现它们,如果它不需要它们的引用或地址指针。
【解决方案2】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-10-01
  • 2019-06-06
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 2016-02-15
相关资源
最近更新 更多