Java Bindings for ChakraCore

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
ECMAScriptChakraCorej2v8Graal.jsNashorn

es5

Yes

Yes

Yes

Yes

es6(es2015)

Partial

Partial

Partial

Partial

es2016+

Partial

Partial

Partial

No

Table 2. Performance Features
ECMAScriptChakraCorej2v8Grall.jsNashorn

wasm

Yes

No

No

No

asm.js

Yes

No

No

No

アーキテクチャ

Java Bindings for ChakraCore は以下のスタック構成になります。

Java8+ enviroment

開発環境

Table 3. Development Enviroment
FeatursJavaVMWebAssembly

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

?

Container diagram

実行環境

Java プロセスと同一プロセスで ChakraCore を使用して 高速に JavaScript を実行できる。Windows、macOS、Linux のプラットフォームでコードの修正なしに動作します。

Component diagram

プラットフォーム

Table 4. CPU Architecture Support
FeatursJavaVMChakraCore(WebAssembly)

ARM64

Yes

Yes

AMD64

Yes

Yes

Table 5. OS Support
JS EnginemacOSWindowsLinuxiOSAndroid

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 エンジンを使用している場合は移行が簡単です。

  1. 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”);
  2. JSエンジンに依存しない場合は僅かこれだけのコード変更で移行が完了します。