gpt4 book ai didi

java - JVM 语言互操作性

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:59:43 26 4
gpt4 key购买 nike

最近我一直在为 JVM 编程语言编写编译器,我意识到一个问题。

我想从我的编程语言访问 Java 方法,并允许 Java 方法访问我的语言中的方法。问题是我需要知道 Java 方法签名才能在我生成的字节码中调用它,反之亦然。

我一直在努力想出 Scala 如何做到这一点的任何方法。这是我的想法。

  1. Scala 访问类路径上的 .java 文件并解析它们,从那里提取方法签名。
  2. .java 文件被编译成.class 文件。然后使用 Java ASM 库访问 .class 文件并获取方法签名。此方法的问题是必须先编译 .java 文件。
  3. .java 文件使用反射动态加载。这个问题是我相信 JVM 不允许加载编译器类路径之外的类。

研究 Scala,它与其他 JVM 语言一起工作得很好,但我找不到关于它究竟如何工作的信息。

Scala如何获取其他JVM语言方法的方法签名?

最佳答案

我认为你混淆了类路径和源路径:类路径上没有 .java.scala 文件,有 .class 文件(可能在 .jar 中)。所以对于依赖项(在类路径上),你不需要做任何特别的事情。它们可以对您的语言有自己的依赖性,包括您项目的先前版本,但它们已经按定义编译。

现在,对于混合项目,源路径上有 Java 和您的语言scalac does parse Java with its own parser (i.e. your option 1) .

选项 3 的问题不是“JVM 不允许加载编译器类路径之外的类”,而是反射也只适用于类,而不适用于源文件。

关于java - JVM 语言互操作性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51306411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com