首页 > 解决方案 > 使用 graalvm 直接将 javascript 文件编译为 java 类

问题描述

我一直在查看 JS 的GraalVM参考大多数示例显示创建上下文并在该上下文中执行 js 代码。

Context context = Context.create()

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

标签: trufflegraalvm

解决方案


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

语言实现是目标语言抽象语法树的解释器。这个解释器是使用 Truffle 框架 API 用 Ja​​va 编写的。

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

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

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

当然,您可以使用jsGraalVM 中的实用程序直接运行 JavaScript 代码。或node.js来自 GraalVM(或其他)。但我认为这不是这里要问的。


推荐阅读