【发布时间】:2018-07-12 13:02:08
【问题描述】:
最近我一直在为 JVM 编程语言编写编译器,但我意识到了一个问题。
我想从我的编程语言访问一个 Java 方法,并允许 Java 方法访问我的语言中的一个方法。问题是我需要知道 Java 方法签名才能在我生成的字节码中调用它,反之亦然。
我一直在尝试思考 Scala 如何做到这一点的任何方法。这是我的想法。
- Scala 访问类路径上的
.java文件并解析它们,从中提取方法签名。 -
.java文件被编译为.class文件。然后使用 Java ASM 库访问.class文件并获取方法签名。这种方法的问题是必须先编译.java文件。 -
.java文件是使用反射动态加载的。这个问题是我相信JVM不允许加载编译器类路径之外的类。
查看 Scala 它可以很好地与其他 JVM 语言配合使用,但我无法找到有关它是如何做到这一点的信息。
Scala 如何获取其他 JVM 语言方法的方法签名?
【问题讨论】:
-
您应该将您希望从您的语言和从 java 访问 java 方法的信息添加到您的方法。 (因为其他答案已被删除)
-
混合使用 java-yourLanguage 项目是一个非常高级的用例。
-
它可能是高级的,但 Scala/Java 等语言可以做到这一点。混合使用这两种语言并不少见,我将来必须实现此功能。
-
Reflection 只为您提供 java -> yourLang 互操作性,即:您可以从代码中调用 java 的东西,但不能反过来。为了让它反过来工作,你必须生成
javac可以使用的东西,即将你的东西编译为 jvm 字节码并将.class提供给javac。
标签: java scala compiler-construction programming-languages java-bytecode-asm