Как использовать graaljs?Есть ли место, где взять файл / файлы .jar? - PullRequest
0 голосов
/ 07 июня 2018

Я использую Java 8 и использую движок JavaScript по умолчанию (Nashorn).

Я хотел бы увидеть, как он сравнивается с «сильно раскрученным» GRAAL JS.См .:

особенно потому, что я слышал, что они хотят осудить nashorn:

Кто-нибудь знает, как (легко) получить доступ к graaljs?Я надеялся найти pom.xml или место, где можно скачать jar-файл, но не удача

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

На данный момент нет готовых jar-файлов Graal.js, доступных вне GraalVM.Чтобы запустить его на другом JDK, вы можете извлечь jar-файлы из 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:

$ mx js
> typeof([] + 1)
string
>

Оболочка работает, 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

Таким образом, он помещает эти файлы в путь к классам:

  • /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, чтоотвечает за регистрацию Graal.js с помощью 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);
    }
  }
}

Компиляция и запуск его на складе JDK 8 дает:

$ 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 и / или компилятор Graal, JIT-компиляции для JS не будут, поэтому не ожидайте многого с точки зрения производительности.Для достижения производительности вам нужны специальные JDK 8 или JDK 9+, а также привязки Graal-Truffle.

0 голосов
/ 07 июня 2018

хорошо, к сожалению, я отвечу на свой вопрос.После небольшого исследования я обнаружил, что не могу запустить его на java 8, и в любом случае .jar (и я не могу создать его вручную) для graaljs

подробности здесь:

https://github.com/graalvm/graaljs/blob/master/docs/BUILDING-GRAAL.JS.md

...