我正在使用GraalVM上的Truffle框架来实现DSL的原型。目前,我的代码应用程序使用ASM直接将DSL编译成JVM字节码,然后动态加载生成的类。为了使它更易于维护和更容易扩展,我想用我的语言来代替。
目前,我还通过提供的组件通过GraalVM / Truffle使用Python。我怎样才能使我的语言与提供的语言一起工作?根据文档,我需要设置"-Dgraalvm.locatorDisabled=true“才能找到我的语言实现--这是可行的。没有它,我就不能使用它。但是,当我启用它时,我就无法使用JS和Python。文档还说,“为了仍然使用内置语言,通过将模块路径指向所有需要的语言家园(例如$GRAALVM/ languages /js),将它们添加到模块路径中。”
这对我没用。我得到了一个错误: java.lang.module.ResolutionException:模块org.graalvm.js没有读取导出com.oracle.truffle.api的模块
我怎么能解决这个问题。或者,是否有更好的方法来使用我的语言和提供的语言?在我看来,在构建语言实现类时,应该有一种通过上下文“注册”我的语言的编程方法。
我无法将我的语言部署为一个组件,因为它非常特定于主机应用程序,并且只能在进程中处理我的应用程序。将其构建为一个组件将使构建和部署过程复杂化,并需要包括大量额外的JARS,并将其暴露在与其无关的更广泛的系统中。
对于上下文,所讨论的DSL是一种查询语言(think ),它使用户能够为系统定义查询,从而有效地与内存缓存交互。
谢谢你,特洛伊
发布于 2022-08-26 09:36:03
理智检查:您是否使用来自maven的松露-api.jar,如文档中所建议的那样
Maven Central上的语言API JAR在其模块-info中导出所有API包。将--升级模块路径选项与-Dgraalvm.locatorDisabled=true和此JAR一起应用于导出语言API包:
-Dgraalvm.locatorDisabled=true --module-path=<yourModulePath>:${truffle.dir} --upgrade-module-path=${truffle.dir}/truffle-api.jahttps://stackoverflow.com/questions/73488802
复制相似问题