Microsoft製JavaScriptエンジンである Chakra には3種類のバージョンがあり、それらを簡単にまとめる。
共通
アプリケーションにJavaScriptを組み込むためにChakraを利用できる。シンプルなC言語のAPIを持ち、ガベージコレクションを備えながらもホスト側で強く意識する必要がない。
GCはホストのスタックを舐めるタイプだと思われる。スタック上に変数を置いているうちは気にする必要がない1。ヒープ上に維持したい場合は、明示的に参照カウントを増減させる。
スクリプトの実行ではJITを行う。JITを使うタイプのJSエンジンの中で最速ではないのではあろうが、やはりインタプリタ系のエンジン (Duktape, Lua 等) と比較すると桁違いの速度を出せる。参考: List of ECMAScript engines
Chakra (Legacy)
- 環境: Windows 7 + IE 11 以降
- ライブラリ: jsrt.lib / jscript9.dll
- ヘッダ:
#include <jsrt.h>
IE 11 に搭載されたJavaScriptエンジンに相当する。これ以上の機能追加はされないが、逆に言えばバージョンを固定して動作保証をするには向いている。以前に記事を書いた。
Chakra (Edge)
- 環境: Windows 10 以降
- ライブラリ: chakrart.lib / chakra.dll
- ヘッダ:
#define USE_EDGEMODE_JSRT
#include <jsrt.h>
Edgeブラウザに搭載されたJavaScriptエンジンに相当する。Windows 10のアップデートに伴い自動的に追加機能が利用できるようになる。適切な使い方をしていれば大丈夫ではあろうが、定期的な動作確認が必要になるかもしれない。Universal Windows Platform (UWP) ではLegacy版は使えないため、こちらのEdge版が必要になる。
他のJavaScriptエンジンと比較しても最新の仕様への追従度がトップレベルなのが魅力。
JavaScript自体の機能拡張の他に、JsRT APIも新機能が追加されている。例えば:
- JavaScript最新機能サポート: Promise, TypedArray 等
- UWPサポート: JsProjectWinRTNamespace 等
- その他便利機能: JsCreateNamedFunction 等
ChakraCore
- 環境: Windows, Ubuntu, OS X
- ライブラリ: ChakraCore.lib / ChakraCore.dll
- ヘッダ:
#include "ChakraCore.h"
ChakraCore は Chakra (Edge) からプラットフォームに強く依存する部分を切り離した、オープンソース (MIT License) のエンジンである。OS組み込みではないためアプリケーションとともに配布する必要があるが、バージョンを固定でき、LinuxやMac、もしかすると古いWindowsでも動作させられる。
バイナリは自分でビルドする必要があるが、Windows版なら Visual Studio 2015 を使えば簡単。v8のビルドと比べて遥かに容易である。64bit版 ChakraCore.dll のサイズは 6.5MB程度。
切り離されたAPIとして、JsProjectWinRTNamespace, JsInspectableToObject, JsVariantToValue 等のWindows APIと関連の深い機能が利用できないようである。
-
CLR (.NET) 環境からP/Invokeしたものをステップ実行した際にデバッガがフリーズした経験があるため、開発環境との相性問題はあるかもしれない。 ↩