オプション
GraalVMでのJavaScriptの実行は、いくつかのオプションを使用して構成できます。
GraalVM JavaScriptランチャのオプション
これらのオプションは、js
ランチャの動作を制御するためのものです:
-e、--eval CODE
: JavaScriptソース・コードを評価し、エンジンを終了します。js -e 'print(1+2);'
-f、--file FILE
: 指定したスクリプト・ファイルをロードして実行します。-f
フラグはオプションであり、大抵は省略できます。js
に対する追加の引数はいずれもファイルとして解釈されるためです。js -f myfile.js
--version
: GraalVM JavaScriptのバージョン情報を出力して終了します。--strict
: JavaScriptの厳密モードでエンジンを実行します。
GraalVM JavaScriptエンジンのオプション
これらのオプションは、GraalVM JavaScriptエンジンの動作を構成するためのものです。これらのオプションは、エンジンの起動方法に応じて、ランチャに渡すか、プログラムを使用して渡します。
これらのオプションのほとんどは試験段階であり、--experimental-options
フラグが必要です。
ランチャに渡す場合
ランチャには、--js.<option-name>=<value>
を使用してオプションを渡します:
js --js.ecmascript-version=6
現在使用可能なオプションは次のとおりです:
--js.annex-b
: ECMAScript Annex B Web互換性機能を有効にします。ブール値であり、デフォルトはtrue
です。--js.array-sort-inherited
: 継承されたキーをArray.protoype.sort
によってソートするかどうかを定義します(実装で定義する動作)。ブール値であり、デフォルトはtrue
です。--js.atomics
: ES2017 Atomicsを有効にします。ブール値であり、デフォルトはtrue
です。--js.ecmascript-version
: 特定のECMAScriptバージョンをエミュレートします。整数値(5
-13
または2015
-2022
)であり、デフォルトは最新の安定バージョンです。--js.foreign-object-prototype
: JavaScript独自の型(外部配列、オブジェクトおよび関数)を模倣する外部オブジェクトにJavaScriptのデフォルト・プロトタイプを渡します。ブール値であり、デフォルトはfalse
です。--js.intl-402
: ECMAScript国際化APIを有効にします。ブール値であり、デフォルトはfalse
です。--js.regexp-static-result
:RegExp.$1
(レガシー)など、最後に成功した一致の結果を含む静的なRegExp
プロパティを渡します。ブール値であり、デフォルトはtrue
です。--js.shared-array-buffer
: ES2017 SharedArrayBufferを有効にします。ブール値であり、デフォルトはfalse
です。--js.strict
: すべてのスクリプトに対して厳密モードを有効にします。ブール値であり、デフォルトはfalse
です。--js.timezone
: ローカル・タイム・ゾーンを設定します。文字列値であり、デフォルトはシステム・デフォルトです。--js.v8-compat
: GoogleのV8エンジンとの互換性を高めます。ブール値であり、デフォルトはfalse
です。
プログラムを使用する場合
GraalVMのポリグロット機能を介してJavaから起動する場合、オプションはプログラムによってContext
オブジェクトに渡されます:
Context context = Context.newBuilder("js")
.option("js.ecmascript-version", "6")
.build();
context.eval("js", "42");
プログラムでオプションを設定する方法の詳細は、「ポリグロット・プログラミング」リファレンスを参照してください。
安定オプションと試験段階のオプション
使用可能なオプションは、安定オプションと試験段階のオプションに区別されます。試験段階のオプションを使用する場合は、事前に特別なフラグを指定する必要があります。
ネイティブ・ランチャ(js
およびnode
)では、すべての試験段階のオプションを使用する前に--experimental-options
を渡す必要があります。Context
を使用する場合は、Context.Builder
でオプションallowExperimentalOptions(true)
をコールする必要があります。ScriptEngine
での試験段階のオプションの使用方法は、「ScriptEngine実装」を参照してください。
ECMAScriptバージョン
このオプションは、ECMAScript仕様の特定のバージョンとの互換性を確保するためのものです。整数値が想定されており、カウント式のバージョン番号(5
から11
)と公開年(2015
以降)の両方がサポートされています。GraalVMの開発バージョンのデフォルトは、ECMAScript 2021仕様
です。GraalVM JavaScriptには、将来のドラフト仕様およびオープンな提案の一部の機能が実装されています(そのバージョンを明示的に選択したり、特定の試験段階フラグを有効にした場合)。本番設定では、ecmascript-version
を既存の最終バージョンの仕様に設定することをお薦めします。
使用可能なバージョンは次のとおりです:
- ECMAScript 5.xを表す
5
- ECMAScript 2015を表す
6
または2015
- ECMAScript 2016を表す
7
または2016
- ECMAScript 2017を表す
8
または2017
- ECMAScript 2018を表す
9
または2018
- ECMAScript 2019を表す
10
または2019
- ECMAScript 2020を表す
11
または2020
- ECMAScript 2021を表す
12
または2021
(デフォルトの最新の最終バージョンの仕様) - ECMAScript 2022を表す
13
または2022
(将来の変更および提案)
GraalVM 21.2では、フラグをlatest
またはstaging
に設定して、最新の安定バージョン(デフォルト)または開発中の試験段階機能を含むステージング・バージョンを使用することもできます。
intl-402
このオプションを使用すると、ECMAScriptの国際化APIが有効になります。ブール値が想定されており、デフォルトはfalse
です。
厳密モード
このオプションを使用すると、すべてのスクリプトに対してJavaScriptの厳密モードが有効になります。ブール値が想定されており、デフォルトはfalse
です。