?um/p1-90`この節、
read-modify-write変更関数とは、2つのバイト値の
read-modify-write変更関数のアルゴリズム手順が純粋な数学的関数を構成することの検証を助けるため、次の編集上の慣例が推奨されます:
固定長ArrayBufferとは、作成後にバイト長を変更できないArrayBufferです。
サイズ変更可能なArrayBufferとは、作成後に
作成されるArrayBufferオブジェクトの種類は、
The
The
The
reallocとして実装してもよいです。The
The
ArrayBufferインスタンスをデタッチすると、そのバッキングストアとして使用される
The
The
The
HostResizeArrayBufferの実装は、次の要件に適合しなければなりません:
HostResizeArrayBufferの既定の実装は
The
The
The
The
The
The
The
The
The
The
The
ArrayBufferコンストラクターは:
extends節の値として使用できる。指定されたArrayBufferの振る舞いを継承しようとするサブクラスコンストラクターは、ArrayBuffer.prototype組み込みメソッドをサポートするために必要な内部状態を持つサブクラスインスタンスを作成して初期化するために、ArrayBufferコンストラクターへのsuper呼び出しを含めなければならない。この関数は呼び出されたとき、次の手順を実行します:
ArrayBufferコンストラクターは:
この関数は呼び出されたとき、次の手順を実行します:
ArrayBuffer.prototypeの初期値は
このプロパティの属性は { [[Writable]]:
ArrayBuffer[%Symbol.species%]は、setアクセサー関数が
この関数の
ArrayBufferプロトタイプオブジェクトは:
ArrayBuffer.prototype.byteLengthは、setアクセサー関数が
ArrayBuffer.prototype.constructorの初期値は
ArrayBuffer.prototype.detachedは、setアクセサー関数が
ArrayBuffer.prototype.maxByteLengthは、setアクセサー関数が
ArrayBuffer.prototype.resizableは、setアクセサー関数が
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このプロパティの属性は { [[Writable]]:
ArrayBufferインスタンスは
[[ArrayBufferData]] が
[[ArrayBufferDetachKey]] が
以下は、
可能な場合、プログラムはその展開環境でテストすることを推奨します。利用可能な物理メモリ量はハードウェアデバイス間で大きく異なります。同様に、仮想メモリサブシステムも、ハードウェアデバイス間だけでなくオペレーティングシステム間でも大きく異なります。64ビットのデスクトップWebブラウザーでメモリ不足エラーなしに動作するアプリケーションが、32ビットのモバイルWebブラウザーではメモリ不足になる可能性があります。
特定の最大サイズで
以下は、
ホストがWebブラウザーのように多数のECMAScriptアプリケーションを同時に実行するマルチテナントであり、その実装が仮想メモリを予約することでインプレース拡張を実装することを選択する場合、32ビットおよび64ビットの実装の両方で、
MMUを持たない組込みデバイス上で動作するホストなど、ホストが仮想メモリを持たない場合、またはホストがコピーによるサイズ変更のみを実装する場合、
固定長SharedArrayBufferとは、作成後にバイト長を変更できないSharedArrayBufferです。
拡張可能なSharedArrayBufferとは、作成後に
作成されるSharedArrayBufferオブジェクトの種類は、
The
The
The
The
HostGrowSharedArrayBufferの実装は、次の要件に適合しなければなりません:
上記の第2要件は、buffer の現在のバイト長がどのように、またはいつ読み取られるかについて意図的に曖昧です。バイト長は基盤ハードウェア上の原子的read-modify-write操作によって更新されなければならないため、load-link/store-conditionalまたはload-exclusive/store-exclusive命令ペアを使用するアーキテクチャは、ペアとなる命令を命令ストリーム内で近接させたい場合があります。そのため、
これは、0 ≤ newByteLength ≤ buffer.[[ArrayBufferMaxByteLength]] が保証されている
HostGrowSharedArrayBufferの既定の実装は
SharedArrayBufferコンストラクターは:
extends節の値として使用できる。指定されたSharedArrayBufferの振る舞いを継承しようとするサブクラスコンストラクターは、SharedArrayBuffer.prototype組み込みメソッドをサポートするために必要な内部状態を持つサブクラスインスタンスを作成して初期化するために、SharedArrayBufferコンストラクターへのsuper呼び出しを含めなければならない。ホストがSharedArrayBufferへの並行アクセスを提供しない場合はいつでも、
ArrayBufferとは異なり、SharedArrayBufferはデタッチされることができず、その内部[[ArrayBufferData]]スロットは決して
この関数は呼び出されたとき、次の手順を実行します:
SharedArrayBufferコンストラクターは:
SharedArrayBuffer.prototypeの初期値は
このプロパティの属性は { [[Writable]]:
SharedArrayBuffer[%Symbol.species%]は、setアクセサー関数が
この関数の
SharedArrayBufferプロトタイプオブジェクトは:
SharedArrayBuffer.prototype.byteLengthは、setアクセサー関数が
SharedArrayBuffer.prototype.constructorの初期値は
このメソッドは呼び出されたとき、次の手順を実行します:
長さを更新するcompare-exchangeの偽の失敗は禁止されています。新しい長さの境界チェックが通過し、実装がメモリ不足でない場合、
SharedArrayBuffer.prototype.growへの並列呼び出しは全順序化されます。例えば、sab.grow(10)とsab.grow(20)という2つのsab.grow(10)の呼び出しは、sab.grow(20)が先に起きた場合でもsabを縮小することは決してなく、その場合は代わりにRangeErrorをスローします。
SharedArrayBuffer.prototype.growableは、setアクセサー関数が
SharedArrayBuffer.prototype.maxByteLengthは、setアクセサー関数が
このメソッドは呼び出されたとき、次の手順を実行します:
このプロパティの属性は { [[Writable]]:
SharedArrayBufferインスタンスは
SharedArrayBufferインスタンスは、ArrayBufferインスタンスと異なり、決してデタッチされません。
以下は、
可能な場合、プログラムはその展開環境でテストすることを推奨します。利用可能な物理メモリ量はハードウェアデバイス間で大きく異なります。同様に、仮想メモリサブシステムも、ハードウェアデバイス間だけでなくオペレーティングシステム間でも大きく異なります。64ビットのデスクトップWebブラウザーでメモリ不足エラーなしに動作するアプリケーションが、32ビットのモバイルWebブラウザーではメモリ不足になる可能性があります。
特定の最大サイズで
u8[idx] の境界チェックのための長さのロードは同期的ではありません。一般に、明示的な同期がない場合、あるプロパティアクセスが範囲内であることは、同じエージェント内の後続のプロパティアクセスも範囲内であることを意味しません。対照的に、SharedArrayBuffer、lengthおよびbyteLengthゲッターを介した長さの明示的なロードは同期的です。
以下は、
拡張操作は
拡張されたメモリは、並列で
MMUを持たない組込みデバイス上で動作するホストなど、仮想メモリを持たないホストで、
DataView With Buffer Witness Recordとは、DataViewを、閲覧対象バッファーのキャッシュされたバイト長とともにカプセル化するために使用される
DataView With Buffer Witness Recordは、
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[Object]] | DataView | バッファーのバイト長がロードされるDataViewオブジェクト。 |
| [[CachedBufferByteLength]] |
非負整数または |
|
The
The
The
The
The
DataViewコンストラクターは:
extends節の値として使用できる。指定されたDataViewの振る舞いを継承しようとするサブクラスコンストラクターは、DataView.prototype組み込みメソッドをサポートするために必要な内部状態を持つサブクラスインスタンスを作成して初期化するために、DataViewコンストラクターへのsuper呼び出しを含めなければならない。この関数は呼び出されたとき、次の手順を実行します:
DataViewコンストラクターは:
DataView.prototypeの初期値は
このプロパティの属性は { [[Writable]]:
DataViewプロトタイプオブジェクトは:
DataView.prototype.bufferは、setアクセサー関数が
DataView.prototype.byteLengthは、setアクセサー関数が
DataView.prototype.byteOffsetは、setアクセサー関数が
DataView.prototype.constructorの初期値は
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このメソッドは呼び出されたとき、次の手順を実行します:
このプロパティの属性は { [[Writable]]:
DataViewインスタンスは、
[[DataView]]内部スロットの値は、この仕様内では使用されません。その内部スロットが存在するという単純な事実が、DataViewコンストラクターを使用して作成されたオブジェクトを識別するために仕様内で使用されます。
Atomicsオブジェクトは:
new演算子と共にコンストラクターとして使用できない。Atomicsオブジェクトは、共有メモリ配列セル上で不可分に(原子的に)動作する関数、およびエージェントがプリミティブイベントを待機しディスパッチできるようにする関数を提供します。規律をもって使用される場合、Atomics関数は、共有メモリを通じて通信するマルチエージェントプログラムが、並列CPU上であってもよく理解された順序で実行できるようにします。共有メモリ通信を支配する規則は、下記で定義される
ECMAScriptにおける共有メモリのプログラミングおよび実装のための参考ガイドラインについては、
Waiter Recordとは、Atomics.waitまたはAtomics.waitAsyncへの特定の呼び出しを表すために使用される
Waiter Recordは、
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[AgentSignifier]] | エージェントsignifier |
Atomics.waitまたはAtomics.waitAsyncを呼び出したエージェント。
|
| [[PromiseCapability]] |
|
Atomics.waitAsyncへの呼び出しを表す場合は結果のpromise、そうでない場合は |
| [[TimeoutTime]] | 非負の拡張数学値 |
タイムアウトが引き起こされ得る最も早い時刻。 |
| [[Result]] |
|
呼び出しの戻り値。 |
WaiterList Recordは、Atomics.wait、Atomics.waitAsync、およびAtomics.notifyを介したエージェントの待機と通知を説明するために使用されます。
WaiterList Recordは、
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[Waiters]] |
|
このWaiterListに関連付けられた位置で待機しているAtomics.waitまたはAtomics.waitAsyncへの呼び出し。
|
| [[MostRecentLeaveEvent]] |
|
その |
同じエージェントsignifierを持つ複数の
エージェントクラスターはWaiterList Recordのストアを持ちます。このストアは (block, i) によって索引付けされます。ここで block は
各WaiterList Recordは、評価中にそのWaiterList Recordへの排他的アクセスを制御するクリティカルセクションを持ちます。一度に1つのエージェントだけがWaiterList Recordのクリティカルセクションに入ることができます。WaiterList Recordのクリティカルセクションへの入退出は、抽象操作
The
The
The
The
The
The
EnterCriticalSectionは、
The
The
The
The
The
Atomics.notifyへの呼び出しを介して)によってのみ、一時停止から復帰できる。The
エージェントは、別のエージェントのpromise capabilityに対して、それをホストに渡すことを超えるいかなる形でもアクセスしてはなりません。
The
The
additionalTimeout は、電力消費の削減やタイミング攻撃を緩和するためのタイマー解像度の粗化など、必要に応じて実装がタイムアウトを延長することを可能にします。この値はDoWaitの呼び出しごとに異なってもよいです。
The
The
The
The &、^、または |), xBytes (バイト値の
& である場合、^ である場合、| である。The
この関数は呼び出されたとき、次の手順を実行します:
この関数は呼び出されたとき、次の手順を実行します:
&, xBytes, yBytes) を返す。この関数は呼び出されたとき、次の手順を実行します:
この関数は呼び出されたとき、次の手順を実行します:
この関数は呼び出されたとき、次の手順を実行します:
この関数は最適化プリミティブです。その直感は、サイズ n バイトのデータ上の原子的プリミティブ(compareExchange、load、store、add、sub、and、or、xor、またはexchange)の原子的手順が、周囲のエージェントがそのデータを構成する n バイトの外側のロックを取得することなしに実行される場合、Atomics.isLockFree(n) は
Atomics.isLockFree(4) は、既知の関連ハードウェアすべてでサポート可能であるため、常に
この関数によって返される値にかかわらず、すべての原子的操作は原子的であることが保証されます。例えば、操作の途中で可視的な操作が発生すること(例えば「tearing」)は決してありません。
この関数は呼び出されたとき、次の手順を実行します:
この関数は呼び出されたとき、次の手順を実行します:
|, xBytes, yBytes) を返す。この関数は呼び出されたとき、次の手順を実行します:
この関数は呼び出されたとき、次の手順を実行します:
この関数は、周囲のエージェントを待機キューに入れて、通知されるか待機がタイムアウトするまで一時停止し、それらの場合を区別するStringを返します。
呼び出されたとき、次の手順を実行します:
この関数は、呼び出し元エージェントが通知されるかタイムアウトに到達したときに解決されるPromiseを返します。
呼び出されたとき、次の手順を実行します:
この関数は、待機キューで眠っているいくつかのエージェントに通知します。
呼び出されたとき、次の手順を実行します:
この関数は呼び出されたとき、次の手順を実行します:
^, xBytes, yBytes) を返す。このプロパティの属性は { [[Writable]]:
JSONオブジェクトは:
parseとstringifyを含む。new演算子と共にコンストラクターとして使用できない。JSONデータ交換形式はECMA-404で定義されています。この仕様で使用されるJSON交換形式は、ECMA-404によって記述されたものと正確に同じです。JSON.parseおよびJSON.stringifyの適合実装は、ECMA-404仕様で記述された正確な交換形式を、その形式に対するいかなる削除または拡張もなしにサポートしなければなりません。
この関数は呼び出されたとき、次の手順を実行します:
この関数はJSONテキスト(JSON形式のString)を解析し、ECMAScript言語値を生成します。JSON形式は、ECMAScriptリテラル、Array Initializer、およびObject Initializerの構文に似た構文で、リテラル、配列、およびオブジェクトを表します。解析後、JSONオブジェクトはECMAScriptオブジェクトとして実現されます。JSON配列はECMAScript Arrayインスタンスとして実現されます。JSON文字列、数値、真偽値、およびnullは、ECMAScriptのString、Number、Boolean、および
任意の reviver パラメーターは、結果をフィルターし変換できる関数です。解析によって生成される各値について、reviver は3つの引数(関連付けられたプロパティキー、値、およびコンテキストオブジェクト)で呼び出されます。プロパティが変更されておらず、その値がプリミティブである場合、提供されるコンテキストオブジェクトは、対応する
この関数の
The
JSON.parseの適合実装がJSON文法を拡張することは許されません。実装が変更または拡張されたJSON交換形式をサポートしたい場合、別の解析関数を定義することによってそうしなければなりません。
有効なJSONテキストはECMAScriptの
しかし、
オブジェクト内に重複する名前Stringがある場合、字句的に先行する同じキーの値は上書きされます。
JSON Parse Recordとは、JSONテキストから解析された値の初期状態を記述するために使用される
JSON Parse Recordは、
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[ParseNode]] | コンテキスト |
|
| [[Key]] | プロパティ名 | [[Value]]が関連付けられているプロパティ名。 |
| [[Value]] | ECMAScript言語値 | [[ParseNode]]の評価によって生成された値。 |
| [[Elements]] | [[Value]]がArrayである場合、これは[[Value]]の要素に対応する |
|
| [[Entries]] | [[Value]]が非Array Objectである場合、これは[[Value]]のエントリーに対応する |
The
{"a":"lost","a":"kept"})の場合、結果のECMAScriptオブジェクトの対応するプロパティの値は、その名前を持つ最後のペアによって指定されます。The
このアルゴリズムは、[[Delete]]または
呼び出されたとき、次の手順を実行します:
The
JSON.parse組み込み関数オブジェクトである(numberトークンは負の値を表す場合があります。ECMAScriptでは、否定は単項演算として表され、その中で - に続く派生 The
この関数は、文字列、数値、真偽値、またはnull値の生のJSONテキストを表すオブジェクトを返します。
この関数は、ECMAScript言語値を表すUTF-16エンコードJSON形式のString、または
呼び出されたとき、次の手順を実行します:
この関数の
JSON構造は任意の深さまで入れ子にできますが、非循環でなければなりません。value が循環構造である、または循環構造を含む場合、この関数は
a = [];
a[0] = a;
my_text = JSON.stringify(a); // これはTypeErrorをスローしなければならない。
シンボリックなプリミティブ値は次のようにレンダリングされます:
String値はQUOTATION MARK(")コード単位で囲まれます。コード単位 " および \ は \ 接頭辞でエスケープされます。制御文字コード単位は、エスケープシーケンス \uHHHH、またはより短い形式である \b(BACKSPACE)、\f(FORM FEED)、\n(LINE FEED)、\r(CARRIAGE RETURN)、\t(CHARACTER TABULATION)に置き換えられます。
有限数は
JSON表現を持たない値(
オブジェクトは、U+007B(LEFT CURLY BRACKET)に続き、0個以上のプロパティをU+002C(COMMA)で区切り、U+007D(RIGHT CURLY BRACKET)で閉じたものとしてレンダリングされます。プロパティは、プロパティ名を表す引用符付きString、U+003A(COLON)、そして文字列化されたプロパティ値からなります。配列は、開始U+005B(LEFT SQUARE BRACKET)に続き、0個以上の値をU+002C(COMMA)で区切り、U+005D(RIGHT SQUARE BRACKET)で閉じたものとしてレンダリングされます。
JSON Serialization Recordとは、JSON形式への直列化を可能にするために使用される
JSON Serialization Recordは、
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[ReplacerFunction]] | 関数オブジェクトまたは |
オブジェクトプロパティの置換値を供給できる関数(JSON.stringifyの replacer パラメーターから)。 |
| [[PropertyList]] | Stringの |
非配列オブジェクトを直列化するときに含めるプロパティ名(JSON.stringifyの replacer パラメーターから)。 |
| [[Gap]] | String | インデントの単位(JSON.stringifyの space パラメーターから)。 |
| [[Stack]] | Objectの |
直列化処理中である入れ子のオブジェクトの集合。循環構造を検出するために使用される。 |
| [[Indent]] | String | 現在のインデント。 |
The
The
| コードポイント | Unicode文字名 | エスケープシーケンス |
|---|---|---|
| U+0008 | BACKSPACE |
\b
|
| U+0009 | CHARACTER TABULATION |
\t
|
| U+000A | LINE FEED (LF) |
\n
|
| U+000C | FORM FEED (FF) |
\f
|
| U+000D | CARRIAGE RETURN (CR) |
\r
|
| U+0022 | QUOTATION MARK |
\"
|
| U+005C | REVERSE SOLIDUS |
\\
|
The
The
The
配列の表現には、array.length(含まない)までの区間内の要素のみが含まれます。キーが配列インデックスでないプロパティは文字列化から除外されます。配列は、開始LEFT SQUARE BRACKET、COMMAで区切られた要素、および終了RIGHT SQUARE BRACKETとして文字列化されます。
このプロパティの属性は { [[Writable]]: