问题标签 [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.
graalvm - GraalVM 多语言上下文内存使用情况
有没有办法找出特定的多语言上下文使用了多少内存?
我想用不同的脚本运行多个上下文,但我想看看每个脚本使用了多少内存。(就我而言,即使是估计也足够了)
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()
尝试将js
optionName 与匹配时JavaScript PolyglotLanguage
,会发生异常。
我不确定如何进行或为什么会发生这种情况。也许关于类加载器的东西?无论哪种方式,任何帮助将不胜感激
javascript - Javascript(GraalJS)与Java中的无符号右移>>>
我有以下 Java 代码:
我正在尝试在 Javascript 中做同样的事情(使用https://github.com/oracle/graaljs引擎),但是,它没有给我与 Java 代码相同的结果:
我认为这可能与 GraalJS 在内部将数字存储为整数和双精度数的方式有关?我也尝试使用下面的方法显式转换为 int ,但它也给了我与 Java 代码不同的结果:
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 相同的数组吗?
javascript - GraalVM JavaScript 存在“主机访问”问题
这是通过 GraalVM CE 21.3.0 的 JavaScrupt 解释器外壳完成的。
尝试访问某些 Java 类,例如java.io.File
导致此错误:
在没有任何选项的情况下运行 shell 时,需要这么多才能得到错误:
当--js.java-package-globals=false
只需要这么多运行 shell 时:
我该如何解决这个问题?如果应该提供这些功能,那么为什么它们不能开箱即用?
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)
有什么办法可以使这项工作?
javascript - 你如何在 GraalJS 中创建一个接受参数的 JavaScript var
我想创建一个变量,您可以使用它Script
为我的应用程序的脚本系统返回一个新对象,但我希望它接受参数来设置和定义脚本对象。这就是我目前在 Java 中使用的
this
返回脚本对象,我想把它放到 JavaScript 中你需要这样做的地方
我如何让它接受争论?
javascript - JavaScript 中所有可能的错误类型的列表?
是否有任何测试套件/ ECMAScript 规范定义的所有可能错误的列表?我目前正在编写一个 JavaScript 运行时,我想有一些花哨的错误,所以我需要从引擎中解析它们并进行相应的处理。
引擎是 Graal.jS,如果这很重要的话。
问候-Yush。
java - 使用 karate.jar 运行功能时“找不到类”
我有一个从 Java 类执行函数的功能。所以出于这个原因,我使用这个命令来获取类并创建一个新实例:
当我使用 maven (mvn test -Dtest...) 运行此功能时,一切正常。问题是当我使用空手道独立 jar 运行此功能时,空手道找不到 RCNUtils 类。
错误:
我认为这是一个类路径问题,但我尝试了很多不同的路径和命令来执行 jar,但没有任何效果。
我不知道这是否是一个已知问题,或者是否有一个使用实用程序类并使用 karate.jar 执行的空手道示例
我用不同的空手道版本测试了这个问题。实际上我使用的是空手道 1.1.0
我尝试过的一些选项没有结果:
- 使用 -w / --workdir 参数更改没有结果的工作目录
- 使用 java -cp 而不是 java -jar 设置类路径如下: Unable to use read('classpath:') when running tests with Standalone karate.jar
- 使用 -Dkarate.config.dir 参数
注意:我不认为这是一个安全问题,因为如果我尝试在同一功能中使用“karate.read()”或“read()”获取“RCNUtils.java”文件,它会起作用。我想是因为我可以把文件的路径。问题是我不能将 java 类的路径放在“Java.type()”方法中
这里同样的错误: Executing Karate jar with mock using external library Spring Framework
提前致谢。
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.isJSProxy
仅true
在传递JSProxyObject
. 甲骨文的文档说
JavaScript 对象作为
com.oracle.truffle.api.interop.java.TruffleMap
. 这个类实现了 Java 的 Map 接口。
TruffleMap 没有出现在GraalVM JavaScript的源代码中,并且只出现在GraalVM的源代码中一次,因此它很可能已被弃用,但这并不重要,因为表示方法可能是相同的。
无论 JS 对象的外部 Java 端表示是什么,它是否包含有关 JavaScript 端对象类型的信息?我可以确定它是否是 JS 代理吗?我可以确定它是否是一个Set
对象吗?(对于原生 JavaScript 对象类型,依此类推。)