オプション
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です。