如何使用 graaljs?有没有地方可以得到 .jar file/files?
How to use graaljs ? Is there a place where to get a .jar file/files?
我使用 Java 8 并且我使用默认的 Java 脚本引擎 (Nashorn)。
我想看看它与 'highly hyped' GRAAL JS 相比如何。
参见:
特别是因为我听说他们想弃用 nashorn:
有人知道如何(轻松)访问 graaljs 吗?
我希望找到 pom.xml 或下载 jar 文件的地方
但不是运气
好的,遗憾的是我会回答我自己的问题。
经过一番研究后,我发现我无法在 java 8 上获得它 运行 并且无论如何,graaljs
没有 .jar(我也无法手动创建它)
详情在这里:
https://github.com/oracle/graaljs/blob/master/docs/Building.md
目前在 GraalVM 之外没有可用的 Graal.js 预构建 jar。要 运行 它在另一个 JDK 上,您可以从 GraalVM 中提取罐子或像这样构建它:
$ git clone git@github.com:graalvm/graaljs.git
$ git clone git@github.com:graalvm/mx.git
$ export PATH=$PWD/mx:$PATH
$ export JAVA_HOME=/usr/java/jdk1.8.0_161
$ cd graaljs/graal-js
$ mx build
请注意,它在 JDK 8 上构建良好。它还在 JDK 8:
上 运行s
$ mx js
> typeof([] + 1)
string
>
shell 有效,Ctrl+D 退出。上一个命令行中的 -v
选项显示了它是如何启动它的:
$ mx -v js
...
env JAVA_HOME=/usr/java/jdk1.8.0_161 ... \
/usr/java/jdk1.8.0_161/bin/java -d64 -cp /tmp/graal-js/graal/sdk/mxbuild/dists/graal-sdk.jar:/tmp/graal-js/graal/truffle/mxbuild/dists/truffle-api.jar:/tmp/graal-js/graal/tools/mxbuild/dists/truffle-profiler.jar:/tmp/graal-js/graal/tools/mxbuild/dists/chromeinspector.jar:/tmp/graal-js/graal/sdk/mxbuild/dists/launcher-common.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs-launcher.jar:/tmp/graal-js/graal/regex/mxbuild/dists/tregex.jar:/home/gmdubosc/.mx/cache/ASM_DEBUG_ALL_702b8525fcf81454235e5e2fa2a35f15ffc0ec7e.jar:/home/gmdubosc/.mx/cache/ICU4J_6f06e820cf4c8968bbbaae66ae0b33f6a256b57f.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs.jar -Dtruffle.js.BindProgramResult=false -Xms2g -Xmx2g -Xss16m com.oracle.truffle.js.shell.JSLauncher
因此它将这些 jar 放在类路径中:
/tmp/graal-js/graal/sdk/mxbuild/dists/graal-sdk.jar
/tmp/graal-js/graal/truffle/mxbuild/dists/truffle-api.jar
/tmp/graal-js/graal/tools/mxbuild/dists/truffle-profiler.jar
/tmp/graal-js/graal/tools/mxbuild/dists/chromeinspector.jar
/tmp/graal-js/graal/sdk/mxbuild/dists/launcher-common.jar
/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs-launcher.jar
/tmp/graal-js/graal/regex/mxbuild/dists/tregex.jar
/home/gmdubosc/.mx/cache/ASM_DEBUG_ALL_702b8525fcf81454235e5e2fa2a35f15ffc0ec7e.jar
/home/gmdubosc/.mx/cache/ICU4J_6f06e820cf4c8968bbbaae66ae0b33f6a256b57f.jar
/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs.jar
查看构建工件,我们还可以看到 mxbuild/dists/graaljs-scriptengine.jar
负责向脚本引擎 API.
注册 Graal.js
使用小测试文件:
import javax.script.*;
import java.util.Arrays;
public class Test {
public static void main(String... args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
for (ScriptEngineFactory factory : manager.getEngineFactories()) {
System.out.printf("%s %s: %s %s%n", factory.getLanguageName(), factory.getLanguageVersion(), factory.getEngineName(), factory.getNames());
}
ScriptEngine engine = manager.getEngineByName("Graal.js");
if (engine != null) {
Object result = engine.eval("typeof([] + 1)");
System.out.println(result);
}
}
}
编译并运行在股票上JDK8给出:
$ javac Test.java
$ java -cp . Test
ECMAScript ECMA - 262 Edition 5.1: Oracle Nashorn [nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript]
现在类路径上有 Graal.js:
$ java -cp /tmp/graal-js/graal/sdk/mxbuild/dists/graal-sdk.jar:/tmp/graal-js/graal/truffle/mxbuild/dists/truffle-api.jar:/tmp/graal-js/graal/regex/mxbuild/dists/tregex.jar:/home/gmdubosc/.mx/cache/ASM_DEBUG_ALL_702b8525fcf81454235e5e2fa2a35f15ffc0ec7e.jar:/home/gmdubosc/.mx/cache/ICU4J_6f06e820cf4c8968bbbaae66ae0b33f6a256b57f.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs-scriptengine.jar:. Test
ECMAScript ECMA - 262 Edition 6: Graal.js [Graal.js, graal.js, Graal-js, graal-js, Graal.JS, Graal-JS, GraalJS, GraalJSPolyglot, js, JS, JavaScript, javascript, ECMAScript, ecmascript]
ECMAScript ECMA - 262 Edition 5.1: Oracle Nashorn [nashorn, Nashorn, null, null, null, null, null, null]
string
(请注意,此命令行忽略 truffle-profiler
、chromeinspector
、launcher-common
和 graaljs-launcher
,这些在通过脚本引擎使用 Graal.js 时不是必需的.)
由于标准 JDK 8 不支持 JVMCI and/or Graal 编译器,因此不会对 JS 进行 JIT 编译,因此不要对性能抱有太大期望。要获得性能,您需要特殊的 JDK 8 或 JDK 9+ 以及 Graal-Truffle 绑定。
我使用 Java 8 并且我使用默认的 Java 脚本引擎 (Nashorn)。
我想看看它与 'highly hyped' GRAAL JS 相比如何。 参见:
特别是因为我听说他们想弃用 nashorn:
有人知道如何(轻松)访问 graaljs 吗? 我希望找到 pom.xml 或下载 jar 文件的地方 但不是运气
好的,遗憾的是我会回答我自己的问题。 经过一番研究后,我发现我无法在 java 8 上获得它 运行 并且无论如何,graaljs
没有 .jar(我也无法手动创建它)详情在这里:
https://github.com/oracle/graaljs/blob/master/docs/Building.md
目前在 GraalVM 之外没有可用的 Graal.js 预构建 jar。要 运行 它在另一个 JDK 上,您可以从 GraalVM 中提取罐子或像这样构建它:
$ git clone git@github.com:graalvm/graaljs.git
$ git clone git@github.com:graalvm/mx.git
$ export PATH=$PWD/mx:$PATH
$ export JAVA_HOME=/usr/java/jdk1.8.0_161
$ cd graaljs/graal-js
$ mx build
请注意,它在 JDK 8 上构建良好。它还在 JDK 8:
上 运行s$ mx js
> typeof([] + 1)
string
>
shell 有效,Ctrl+D 退出。上一个命令行中的 -v
选项显示了它是如何启动它的:
$ mx -v js
...
env JAVA_HOME=/usr/java/jdk1.8.0_161 ... \
/usr/java/jdk1.8.0_161/bin/java -d64 -cp /tmp/graal-js/graal/sdk/mxbuild/dists/graal-sdk.jar:/tmp/graal-js/graal/truffle/mxbuild/dists/truffle-api.jar:/tmp/graal-js/graal/tools/mxbuild/dists/truffle-profiler.jar:/tmp/graal-js/graal/tools/mxbuild/dists/chromeinspector.jar:/tmp/graal-js/graal/sdk/mxbuild/dists/launcher-common.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs-launcher.jar:/tmp/graal-js/graal/regex/mxbuild/dists/tregex.jar:/home/gmdubosc/.mx/cache/ASM_DEBUG_ALL_702b8525fcf81454235e5e2fa2a35f15ffc0ec7e.jar:/home/gmdubosc/.mx/cache/ICU4J_6f06e820cf4c8968bbbaae66ae0b33f6a256b57f.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs.jar -Dtruffle.js.BindProgramResult=false -Xms2g -Xmx2g -Xss16m com.oracle.truffle.js.shell.JSLauncher
因此它将这些 jar 放在类路径中:
/tmp/graal-js/graal/sdk/mxbuild/dists/graal-sdk.jar
/tmp/graal-js/graal/truffle/mxbuild/dists/truffle-api.jar
/tmp/graal-js/graal/tools/mxbuild/dists/truffle-profiler.jar
/tmp/graal-js/graal/tools/mxbuild/dists/chromeinspector.jar
/tmp/graal-js/graal/sdk/mxbuild/dists/launcher-common.jar
/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs-launcher.jar
/tmp/graal-js/graal/regex/mxbuild/dists/tregex.jar
/home/gmdubosc/.mx/cache/ASM_DEBUG_ALL_702b8525fcf81454235e5e2fa2a35f15ffc0ec7e.jar
/home/gmdubosc/.mx/cache/ICU4J_6f06e820cf4c8968bbbaae66ae0b33f6a256b57f.jar
/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs.jar
查看构建工件,我们还可以看到 mxbuild/dists/graaljs-scriptengine.jar
负责向脚本引擎 API.
使用小测试文件:
import javax.script.*;
import java.util.Arrays;
public class Test {
public static void main(String... args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
for (ScriptEngineFactory factory : manager.getEngineFactories()) {
System.out.printf("%s %s: %s %s%n", factory.getLanguageName(), factory.getLanguageVersion(), factory.getEngineName(), factory.getNames());
}
ScriptEngine engine = manager.getEngineByName("Graal.js");
if (engine != null) {
Object result = engine.eval("typeof([] + 1)");
System.out.println(result);
}
}
}
编译并运行在股票上JDK8给出:
$ javac Test.java
$ java -cp . Test
ECMAScript ECMA - 262 Edition 5.1: Oracle Nashorn [nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript]
现在类路径上有 Graal.js:
$ java -cp /tmp/graal-js/graal/sdk/mxbuild/dists/graal-sdk.jar:/tmp/graal-js/graal/truffle/mxbuild/dists/truffle-api.jar:/tmp/graal-js/graal/regex/mxbuild/dists/tregex.jar:/home/gmdubosc/.mx/cache/ASM_DEBUG_ALL_702b8525fcf81454235e5e2fa2a35f15ffc0ec7e.jar:/home/gmdubosc/.mx/cache/ICU4J_6f06e820cf4c8968bbbaae66ae0b33f6a256b57f.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs-scriptengine.jar:. Test
ECMAScript ECMA - 262 Edition 6: Graal.js [Graal.js, graal.js, Graal-js, graal-js, Graal.JS, Graal-JS, GraalJS, GraalJSPolyglot, js, JS, JavaScript, javascript, ECMAScript, ecmascript]
ECMAScript ECMA - 262 Edition 5.1: Oracle Nashorn [nashorn, Nashorn, null, null, null, null, null, null]
string
(请注意,此命令行忽略 truffle-profiler
、chromeinspector
、launcher-common
和 graaljs-launcher
,这些在通过脚本引擎使用 Graal.js 时不是必需的.)
由于标准 JDK 8 不支持 JVMCI and/or Graal 编译器,因此不会对 JS 进行 JIT 编译,因此不要对性能抱有太大期望。要获得性能,您需要特殊的 JDK 8 或 JDK 9+ 以及 Graal-Truffle 绑定。