Java Bindings for ChakraCore は JavaScript および WebAssembly をJava アプリケーションに統合する YOSBITS の独自技術です。これによってJavaアプリケーション上で、C/C++ 言語のコード資産を速度とセキュアを両立して再利用可能にします。
| ChakraCore は Microsoftによって開発中のJavaScript エンジンで JavaScript と WebAssembly の実行が可能です。 |
背景
JDK には Nashorn が組み込まれていますが、ES5 時代で開発が殆ど停止状態にあり、最新のWeb標準と比較して古くなっています。
j2v8 (V8) はAndroid プラットフォームにフォーカスして 他のプラットフォームのアップデートは停滞しています。
Java Bindings for ChakraCore
Java Bindings for ChakraCore によって、Java と ChakraCore の統合が可能になります。Java アプリケーションから JavaScript および、WebAssembly をメソッドとして呼び出して、結果を得ることが可能になります。
特徴
- JavaScript エンジンとの疎結合
ChakraCore は非常に短い期間でアップデートリリースがあるが、ABI の互換性が維持されている場合には、Java Bindings for ChakraCore のアップデートは不要で、ChakraCore のバイナリで配布されている動的ライブラリを置き換えるだけでアップデートが可能です。
j2v8 のような密結合のライブラリでは、常に最新に維持しようとすると、短いサイクルでリリースする必要がありメンテナンスコストが高くなります。Java Bindings for ChakraCore では疎結合となっておりサイクルを合わせる必要がない。
- 最新のWeb標準のサポート
Table 1. Language Features ECMAScript ChakraCore j2v8 Graal.js Nashorn es5
Yes
Yes
Yes
Yes
es6(es2015)
Partial
Partial
Partial
Partial
es2016+
Partial
Partial
Partial
No
Table 2. Performance Features ECMAScript ChakraCore j2v8 Grall.js Nashorn wasm
Yes
No
No
No
asm.js
Yes
No
No
No
アーキテクチャ
Java Bindings for ChakraCore は以下のスタック構成になります。
開発環境
| Featurs | JavaVM | WebAssembly |
|---|---|---|
Compiler | javac(JDK) | emcc(EMSDK) |
Language | Java, Scala, Kotlin | C, C++, Rust |
gc | Yes | No |
Debugger | Eclipse, IntelliJ IDEA | Web Browser |
Profiler | VisualVM | Web Browser |
Unit Test | JUnit | ? |
Static Analysis | FindBugs, SonarQube | ? |
Dynamic Analysis | Eclipse, SonarQube | ? |
実行環境
Java プロセスと同一プロセスで ChakraCore を使用して 高速に JavaScript を実行できる。Windows、macOS、Linux のプラットフォームでコードの修正なしに動作します。
プラットフォーム
| Featurs | JavaVM | ChakraCore(WebAssembly) |
|---|---|---|
ARM64 | Yes | Yes |
AMD64 | Yes | Yes |
| JS Engine | macOS | Windows | Linux | iOS | Android |
|---|---|---|---|---|---|
ChakraCore | Yes | Yes | Yes | No | No |
JavaScriptCore | Yes | No | No | Yes | No |
j2v8 (v8) | (Yes) | (Yes) | (Yes) | No | Yes |
Nashorn | Yes | Yes | Yes | No | No |
GraalJS | Yes | Yes | Yes | No | No |
マイグレーション
JSR-223 の Scripting API を通して JavaScript エンジンを使用している場合は移行が簡単です。
Graal.js JSR-223 スクリプトエンジンを ChakraCore のエンジン名に置き換えます。
// ScriptEngine jsEngine = new ScriptEngineManager().getEngineByName("Nashorn");
// ScriptEngine jsEngine = new ScriptEngineManager().getEngineByName("Graal.js");
// ScriptEngine jsEngine = new ScriptEngineManager().getEngineByName("v8");
ScriptEngine jsEngine = new ScriptEngineManager().getEngineByName(“ChakraCore”);JSエンジンに依存しない場合は僅かこれだけのコード変更で移行が完了します。