GraalVMを使ってJavaScriptコードを実行する

今日は GraalVM の紹介です。 GraalVM には JavaScriptエンジン GraalJS が搭載されており、今回はこの GraalJS を利用して JavaScriptコードを実行します。 結論から言うと、Google V8 を搭載した Node.js に比べて処理速度が非常に遅いです。

 

〈インストール〉


OS:Windows 8.1
Download GraalVM から GraalVM Community 版の graalvm-ce-java11-windows-amd64-20.2.0.zip をダウロードして解凍します。

 

コンパイルと実行〉


> set path=C:\graalvm-ce-java11-20.2.0\bin;%path%;
> javac graaljs.java
> java Main

 

graaljs.java


import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

class Main {
  public static void main(String... arg) throws IOException, ScriptException {
    ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("graal.js");
    Path path = Paths.get("gauss.js");
    String string = Files.readString(path);
    scriptEngine.eval(string);
  }
}
 

 

gauss.js


let a = [[1.2, 0.5, 9.2, 7.6, 2.1], [9.8, 1.3, 8.4, 5.3, 3.3], [4.1, 2.7, 1.4, 7.3, 5.6], [0.2, 8.7, 4.5, 1.9, 0.6], [3.7, 6.4, 5.6, 2.6, 1.7]];
let b = [1.9, 8.3, 5.1, 3.4, 7.2];
solve(a, b);
for (const i in b) print(b[i]);
function solve(a, b) {
  const length = a.length;
  for (let k = 0; k < length - 1; k++) {
    for (let i = k + 1; i < length; i++) {
      const s = a[i][k] / a[k][k];
      for (let j = k + 1; j < length; j++) {
        a[i][j] -= s * a[k][j];
      }
      b[i] -= s * b[k];
    }
  }
  for (let i = length - 1; i >= 0; i--) {
    for (let j = i + 1; j < length; j++) {
      b[i] -= a[i][j] * b[j];
    }
    b[i] /= a[i][i];
  }
}
 

 

〈実行結果〉


-0.9323029736838784
-0.26417804844124876
 2.1050224733413256
-3.850614593250481
 6.213960355526066


参考記事