Mic*_*ael 10 java compiler-construction programming-languages scala java-bytecode-asm
最近我一直在为JVM编程语言编写一个编译器,我意识到了一个问题.
我想从我的编程语言中访问Java方法,并允许Java方法以我的语言访问方法.问题是我需要知道Java方法签名,以便在我生成的字节码中调用它,反之亦然.
我一直在试图考虑Scala如何做到这一点的任何方法.这是我的想法.
.java类路径上的文件并解析它们,从那里提取方法签名. .java文件被编译为.class文件.然后使用Java ASM库来访问.class文件并获取方法签名.此方法的问题是.java必须首先编译文件. .java使用反射动态加载文件.这个问题是我认为JVM不允许加载编译器类路径之外的类. 查看Scala,它可以很好地与其他JVM语言配合使用,但我无法找到有关它如何实现的信息.
Scala如何获取其他JVM语言方法的方法签名?
我认为你混淆了类路径和源路径:类路径上没有.java或.scala文件,有.class文件(可能在.jars 里面).因此,对于依赖项(在类路径上),您不需要做任何特殊的事情.它们可以对您的语言有自己的依赖关系,包括项目的早期版本,但它们已按定义编译.
现在,对于混合项目,您在源路径上拥有Java和您的语言,scalac会使用自己的解析器(即您的选项1)解析Java.
选项3的问题不在于"JVM不允许加载编译器类路径之外的类",但该反射也仅适用于类,而不适用于源文件.