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
参考記事
- GraalVM
- Download GraalVM
- JavaScriptエンジンをNashornからGraalJSに移行する(その1)
- JavaScriptエンジンをNashornからGraalJSに移行する(その2)
- JavaScriptエンジンをNashornからGraalJSに移行する(その3)