使用 graalvm 直接将 java 脚本文件编译为 java class

directly compile a javascript file to a java class using graalvm

我一直在查看 GraalVM reference for JS,大多数示例都展示了创建上下文并在该上下文中执行 js 代码。

Context context = Context.create()

有没有办法直接将 JS 代码编译成字节码等价物,加载它并直接 运行 它?

GraalVM 语言、JavaScript、Ruby、R、Python、Webassembly、GraalSqueak 等不将目标程序编译成字节码。

语言实现是目标语言抽象语法树的解释器。该解释器是使用 Truffle 框架 API.

在 Java 中编写的

在运行时,您使用此解释器的节点构建程序 AST,它们知道如何评估自己。例如像 a + b 这样的东西可以变成 3 个节点对象,AddNode 和 2 个子节点。 AddNode.evaluate() 可能类似于 return left.evaluate() + right evaluate().

您可以解释目标程序的树,这就是它的执行方式。在 运行 时间,解释器可以修改树,在收集一些关于将要执行的内容的配置文件后优化执行。它使用一种称为部分评估的技术(您可以将其视为非常全面的内联)将解释器代码和程序中的数据融合在一起。

然后解释器代码进一步JIT-compiled 与JVM jit 编译器。但是程序没有中间字节码表示。

当然,您可以使用 GraalVM 中的 js 实用程序来 运行 Java 直接用它编写脚本代码。或来自 GraalVM(或其他)的 node.js。不过我觉得这里问的不是这个。