问题标签 [graaljs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
20 浏览

graalvm - GraalVM 多语言上下文内存使用情况

有没有办法找出特定的多语言上下文使用了多少内存?

我想用不同的脚本运行多个上下文,但我想看看每个脚本使用了多少内存。(就我而言,即使是估计也足够了)

0 投票
1 回答
54 浏览

java - GraalJS - 无法从 jar 构建 ScriptEngine

我遇到了一个涉及 GraalJS 的问题。我正在尝试将它用作我的 JavaScript 后端。当我从 IntelliJ 运行时,它可以完美运行,但是一旦我导出可运行的 .jar,它就会停止工作。这几天我一直在调试这个问题,下面是我的发现。

应该提到的是,我通过使用与 libGdx 一起打包的名为 desktop:dist 的 gradle 命令生成可运行的 .jar。

首先,这些是我使用的依赖项

这就是我构建 ScriptEngine 的方式

现在,当我从 .jar 运行程序时,我得到了这个异常:

经过一些调试,我得出的结论是,当PolyglotContextConfig尝试PolyglotLanguage为 optionName找到 a 时会发生这种情况js。事实证明,这是 IntelliJ 与从可运行的 .jar 运行之间的区别。IntelliJ 包含对 JavaScript 的支持PolyglotLanguage,而 .jar 不包含。这是我发现的

通过查看Engine -> impl -> idToLanguage(我通过反射访问了这些包私有字段),我得到以下结果

智能:

可运行的.jar:

原来对 JavaScript 的支持只是……错过了?因此,当PolyglotContextConfig.findLanguageForOption()尝试将jsoptionName 与匹配时JavaScript PolyglotLanguage,会发生异常。

我不确定如何进行或为什么会发生这种情况。也许关于类加载器的东西?无论哪种方式,任何帮助将不胜感激

0 投票
1 回答
63 浏览

javascript - Javascript(GraalJS)与Java中的无符号右移>>>

我有以下 Java 代码:

我正在尝试在 Javascript 中做同样的事情(使用https://github.com/oracle/graaljs引擎),但是,它没有给我与 Java 代码相同的结果:

我认为这可能与 GraalJS 在内部将数字存储为整数和双精度数的方式有关?我也尝试使用下面的方法显式转换为 int ,但它也给了我与 Java 代码不同的结果:

0 投票
1 回答
104 浏览

javascript - JavaScript 等效于 Java 的 String.getBytes(StandardCharsets.UTF_8)

我有以下 Java 代码:

这将输出以下字节数组:

我试图在 Javascript 中获得相同的结果。我已经尝试过这里发布的解决方案:

https://stackoverflow.com/a/51904484/12177456

但这给出了这个(这是一个https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array):

这对我来说是个问题,因为我使用的是 graal js 引擎,并且需要将数组传递给需要 a 的 java 函数byte[],因此数组中的任何值 > 127 都会导致错误,如下所述:

https://github.com/oracle/graal/issues/2118

注意我也尝试了TextEncoder类而不是strToUtf8Bytes这里描述的函数:

java string.getBytes("UTF-8") 等效的javascript

但它给出了与上面相同的结果。

还有什么我可以在这里尝试的,以便让 JavaScript 生成与 Java 相同的数组吗?

0 投票
1 回答
38 浏览

javascript - GraalVM JavaScript 存在“主机访问”问题

这是通过 GraalVM CE 21.3.0 的 JavaScrupt 解释器外壳完成的。

尝试访问某些 Java 类,例如java.io.File导致此错误:

在没有任何选项的情况下运行 shell 时,需要这么多才能得到错误:

--js.java-package-globals=false只需要这么多运行 shell 时:

我该如何解决这个问题?如果应该提供这些功能,那么为什么它们不能开箱即用?

0 投票
1 回答
52 浏览

java - 有没有办法使用 java 对象作为函数的参数并在 GraalJS 中返回所述对象的值之一?

我想使用 Java 对象new Train()作为参数传递给 JavaScript 函数,这里是 Java 代码

JavaScript 代码

截至目前,它将此错误放在控制台中

[16:56:42] [INFO]: [STDERR]: javax.script.ScriptException: org.graalvm.polyglot.PolyglotException: TypeError: invokeMember (getSpeed) on ScriptExecutor$Train@429b2a7b failed due to: Unknown identifier: getSpeed [16:56:42] [INFO]: [STDERR]: at com.oracle.truffle.js.scriptengine.GraalJSScriptEngine.toScriptException(GraalJSScriptEngine.java:483) [16:56:42] [INFO]: [STDERR]: at com.oracle.truffle.js.scriptengine.GraalJSScriptEngine.invokeFunction(GraalJSScriptEngine.java:558)

有什么办法可以使这项工作?

0 投票
0 回答
24 浏览

javascript - 你如何在 GraalJS 中创建一个接受参数的 JavaScript var

我想创建一个变量,您可以使用它Script为我的应用程序的脚本系统返回一个新对象,但我希望它接受参数来设置和定义脚本对象。这就是我目前在 Java 中使用的

this返回脚本对象,我想把它放到 JavaScript 中你需要这样做的地方

我如何让它接受争论?

0 投票
1 回答
43 浏览

javascript - JavaScript 中所有可能的错误类型的列表?

是否有任何测试套件/ ECMAScript 规范定义的所有可能错误的列表?我目前正在编写一个 JavaScript 运行时,我想有一些花哨的错误,所以我需要从引擎中解析它们并进行相应的处理。

引擎是 Graal.jS,如果这很重要的话。

问候-Yush。

0 投票
0 回答
49 浏览

java - 使用 karate.jar 运行功能时“找不到类”

我有一个从 Java 类执行函数的功能。所以出于这个原因,我使用这个命令来获取类并创建一个新实例:

在此处输入图像描述

当我使用 maven (mvn test -Dtest...) 运行此功能时,一切正常。问题是当我使用空手道独立 jar 运行此功能时,空手道找不到 RCNUtils 类。

错误:

在此处输入图像描述

GraalJS 错误: https ://github.com/oracle/graaljs/blob/master/docs/user/FAQ.md#typeerror-access-to-host-class-commyexamplemyclass-is-not-allowed-or-does-not -存在


我认为这是一个类路径问题,但我尝试了很多不同的路径和命令来执行 jar,但没有任何效果。

我不知道这是否是一个已知问题,或者是否有一个使用实用程序类并使用 karate.jar 执行的空手道示例

我用不同的空手道版本测试了这个问题。实际上我使用的是空手道 1.1.0

我尝试过的一些选项没有结果:

  1. 使用 -w / --workdir 参数更改没有结果的工作目录
  2. 使用 java -cp 而不是 java -jar 设置类路径如下: Unable to use read('classpath:') when running tests with Standalone karate.jar
  3. 使用 -Dkarate.config.dir 参数

注意:我不认为这是一个安全问题,因为如果我尝试在同一功能中使用“karate.read()”或“read()”获取“RCNUtils.java”文件,它会起作用。我想是因为我可以把文件的路径。问题是我不能将 java 类的路径放在“Java.type()”方法中

这里同样的错误: Executing Karate jar with mock using external library Spring Framework

提前致谢。

0 投票
1 回答
28 浏览

javascript - GraalVM JavaScript 的 JS 到 Java 对象转换是否包含类型信息?

为了在 GraalVM JavaScript 上模仿 Node 下的一些函数util.types,我转向了可以访问Java.type的 Java 函数或 Java 包全局变量。GraalVM 具有类似的内部功能,JSProxy.isJSProxy并且JSSet.isJSSet可以执行此操作。我通过将它们标记为导出、重新编译和测试它们来使它们可访问(我使用例如,访问它们Java.type("com.oracle.truffle.js.builtins.runtime.JSProxy").isJSProxy)。

我发现,GraalVM JavaScript 的内部函数对我来说毫无用处。例如,JSProxy.isJSProxytrue在传递JSProxyObject. 甲骨文的文档

JavaScript 对象作为com.oracle.truffle.api.interop.java.TruffleMap. 这个类实现了 Java 的 Map 接口。

TruffleMap 没有出现在GraalVM JavaScript的源代码中,并且只出现在GraalVM的源代码中一次,因此它很可能已被弃用,但这并不重要,因为表示方法可能是相同的。

无论 JS 对象的外部 Java 端表示是什么,它是否包含有关 JavaScript 端对象类型的信息?我可以确定它是否是 JS 代理吗?我可以确定它是否是一个Set对象吗?(对于原生 JavaScript 对象类型,依此类推。)