?uem/p1-90`この節、
read-modify-write modification function とは、byte 値の2つの
read-modify-write modification function のアルゴリズム手順が純粋な数学関数を構成することの検証を助けるため、次の編集上の規約が推奨されます。
固定長 ArrayBuffer とは、作成後に byte length を変更できない ArrayBuffer です。
サイズ変更可能な ArrayBuffer とは、
作成される ArrayBuffer オブジェクトの種類は、
realloc として実装してもよい。ArrayBuffer インスタンスを detach すると、その backing store として使用される
ホスト定義の抽象操作 HostResizeArrayBuffer。引数 buffer (ArrayBuffer) および newByteLength (非負整数)。戻り値:(
HostResizeArrayBuffer の実装は次の要件に適合しなければなりません。
HostResizeArrayBuffer の既定の実装は
ArrayBuffer
extends 節の値として使用できます。規定された ArrayBuffer の動作を継承しようとするサブクラスArrayBuffer.prototype の組込みメソッドをサポートするために必要な内部状態を持つサブクラスインスタンスを作成して初期化するため、ArrayBuffer super 呼出しを含まなければなりません。この関数は呼び出されたとき、次の手順を実行します。
ArrayBuffer
この関数は呼び出されたとき、次の手順を実行します。
ArrayBuffer.prototype の初期値は
このプロパティは属性 { [[Writable]]:
ArrayBuffer[%Symbol.species%] は、set アクセサー関数が
この関数の
ArrayBuffer prototype オブジェクトは:
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 ブラウザーで out-of-memory エラーなしに実行できるアプリケーションでも、32ビットのモバイル Web ブラウザーではメモリ不足になる可能性があります。
特定の最大サイズで
以下は、
Web ブラウザーのように
MMU のない組込みデバイス上で動作するものなど、
固定長 SharedArrayBuffer とは、作成後に byte length を変更できない SharedArrayBuffer です。
拡張可能な SharedArrayBuffer とは、
作成される SharedArrayBuffer オブジェクトの種類は、
ホスト定義の抽象操作 HostGrowSharedArrayBuffer。引数 buffer (SharedArrayBuffer) および newByteLength (非負整数)。戻り値:(
HostGrowSharedArrayBuffer の実装は次の要件に適合しなければなりません。
上記の第2要件は、buffer の現在の byte length をどのように、またいつ読み取るかについて意図的に曖昧にしています。byte length は基礎となるハードウェア上の atomic read-modify-write 操作を介して更新されなければならないため、load-link/store-conditional または load-exclusive/store-exclusive 命令ペアを使用するアーキテクチャでは、対となる命令を命令ストリーム内で近接させたい場合があります。そのため、
これは、0 ≤ newByteLength ≤ buffer.[[ArrayBufferMaxByteLength]] が保証される
HostGrowSharedArrayBuffer の既定の実装は
SharedArrayBuffer
extends 節の値として使用できます。規定された SharedArrayBuffer の動作を継承しようとするサブクラスSharedArrayBuffer.prototype の組込みメソッドをサポートするために必要な内部状態を持つサブクラスインスタンスを作成して初期化するため、SharedArrayBuffer super 呼出しを含まなければなりません。ArrayBuffer とは異なり、SharedArrayBuffer は detached になることがなく、その内部 [[ArrayBufferData]] スロットが
この関数は呼び出されたとき、次の手順を実行します。
SharedArrayBuffer
SharedArrayBuffer.prototype の初期値は
このプロパティは属性 { [[Writable]]:
SharedArrayBuffer[%Symbol.species%] は、set アクセサー関数が
この関数の
SharedArrayBuffer prototype オブジェクトは:
SharedArrayBuffer.prototype.byteLength は、set アクセサー関数が
SharedArrayBuffer.prototype.constructor の初期値は
このメソッドは呼び出されたとき、次の手順を実行します。
長さを更新する compare-exchange の偽の失敗は禁止されています。新しい長さの境界検査に合格し、実装がメモリ不足でない場合、
SharedArrayBuffer.prototype.grow の並列呼出しは全順序付けされます。たとえば、sab.grow(10) と sab.grow(20) という2つのsab.grow(20) が先に発生した場合でも、sab.grow(10) の呼出しが sab を縮小することは決してなく、その場合は代わりに RangeError をスローします。
SharedArrayBuffer.prototype.growable は、set アクセサー関数が
SharedArrayBuffer.prototype.maxByteLength は、set アクセサー関数が
このメソッドは呼び出されたとき、次の手順を実行します。
このプロパティは属性 { [[Writable]]:
SharedArrayBuffer インスタンスは
SharedArrayBuffer インスタンスは ArrayBuffer インスタンスとは異なり、決して detached になりません。
以下は、
可能な場合、プログラムは配備環境でテストすることを推奨します。利用可能な物理メモリ量はハードウェアデバイス間で大きく異なります。同様に、仮想メモリサブシステムもハードウェアデバイス間およびオペレーティングシステム間で大きく異なります。64ビットのデスクトップ Web ブラウザーで out-of-memory エラーなしに実行できるアプリケーションでも、32ビットのモバイル Web ブラウザーではメモリ不足になる可能性があります。
特定の最大サイズで
u8[idx] のようなlength および byteLength getter を介した長さの明示的な load は同期を伴います。
以下は、
拡張操作は
拡張されたメモリは、その作成時点から、並列の
MMU のない組込みデバイス上で動作するものなど、仮想メモリを持たない
DataView With Buffer Witness Record は、DataView と、view しているバッファのキャッシュされた byte length をともにカプセル化するために使用される
DataView With Buffer Witness Record は
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[Object]] | a DataView | バッファの byte length が読み込まれる DataView オブジェクト。 |
| [[CachedBufferByteLength]] |
a non-negative integer or |
|
DataView
extends 節の値として使用できます。規定された DataView の動作を継承しようとするサブクラスDataView.prototype の組込みメソッドをサポートするために必要な内部状態を持つサブクラスインスタンスを作成して初期化するため、DataView super 呼出しを含まなければなりません。この関数は呼び出されたとき、次の手順を実行します。
DataView
DataView.prototype の初期値は
このプロパティは属性 { [[Writable]]:
DataView prototype オブジェクトは:
DataView.prototype.buffer は、set アクセサー関数が
DataView.prototype.byteLength は、set アクセサー関数が
DataView.prototype.byteOffset は、set アクセサー関数が
DataView.prototype.constructor の初期値は
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このメソッドは呼び出されたとき、次の手順を実行します。
このプロパティは属性 { [[Writable]]:
DataView インスタンスは
[[DataView]] 内部スロットの値はこの仕様内では使用されません。その内部スロットが存在すること自体が、DataView
Atomics オブジェクトは:
new 演算子でAtomics オブジェクトは、共有メモリ配列セルに対して不可分(atomic)に動作する関数と、agent がプリミティブイベントを待機および通知できる関数を提供します。規律を守って使用することで、Atomics 関数は、共有メモリを介して通信するマルチ agent プログラムが、並列 CPU 上であっても十分に理解可能な順序で実行されるようにできます。共有メモリ通信を支配する規則は、以下で定義される
Waiter Record は、Atomics.wait または Atomics.waitAsync の特定の呼出しを表すために使用される
Waiter Record は
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[AgentSignifier]] | an agent signifier |
Atomics.wait または Atomics.waitAsync を呼び出した agent。
|
| [[PromiseCapability]] |
a |
Atomics.waitAsync の呼出しを表す場合は結果の promise、それ以外の場合は |
| [[TimeoutTime]] |
a non-negative |
timeout が発生し得る最も早い時刻。time value を使用して計算されます。 |
| [[Result]] |
|
呼出しの戻り値。 |
WaiterList Record は、Atomics.wait、Atomics.waitAsync、および Atomics.notify を介した agent の待機と通知を説明するために使用されます。
WaiterList Record は
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[Waiters]] |
a |
この WaiterList に関連付けられた位置で待機している Atomics.wait または Atomics.waitAsync の呼出し。
|
| [[MostRecentLeaveEvent]] |
a |
その |
同じ agent signifier を持つ複数の
agent cluster は WaiterList Record の保存領域を持ちます。この保存領域は (block, i) によって索引付けされます。ここで block は
各 WaiterList Record は、評価中にその WaiterList Record への排他的アクセスを制御するcritical sectionを持ちます。一度に1つの agent だけが WaiterList Record の critical section に入ることができます。WaiterList Record の critical section への進入および退出は、
EnterCriticalSection は、
Atomics.notify の呼出し)によってのみ一時停止から復帰できる。agent は、別の agent の promise capability を
additionalTimeout により、実装は消費電力の削減やタイミング攻撃を緩和するためのタイマー分解能の粗粒度化など、必要に応じて timeout を延長できます。この値は DoWait の呼出しごとに異なってもかまいません。
&、^ または |))、xBytes (
& である場合、^ である場合、| である。この関数は呼び出されたとき、次の手順を実行します。
この関数は呼び出されたとき、次の手順を実行します。
&, xBytes, yBytes) を返す。この関数は呼び出されたとき、次の手順を実行します。
この関数は呼び出されたとき、次の手順を実行します。
この関数は呼び出されたとき、次の手順を実行します。
この関数は最適化用プリミティブです。直感的には、サイズ n byte のデータに対する atomic プリミティブ(compareExchange、load、store、add、sub、and、or、xor、または exchange)の atomic な手順が、そのデータを構成する n byte の外側にあるロックを周囲の agent が取得することなく実行される場合、Atomics.isLockFree(n) は
Atomics.isLockFree(4) は、既知のすべての関連ハードウェアでサポートできるため、常に
この関数が返す値に関係なく、すべての atomic 操作は atomic であることが保証されます。たとえば、操作の途中で観測可能な操作が発生する(例:「tearing」)ことは決してありません。
この関数は呼び出されたとき、次の手順を実行します。
この関数は、wait queue 内でスリープしているいくつかの agent に通知します。
呼び出されたとき、次の手順を実行します。
この関数は呼び出されたとき、次の手順を実行します。
|, xBytes, yBytes) を返す。この関数は、プログラムが値を待ちながらスピンループしていることを CPU に示すヒントを提供します。
呼び出されたとき、次の手順を実行します。
このメソッドは、mutex 内の spinlock fast path など、スピン待機ループを実装するプログラムが、値を待ちながらスピンしていることを CPU に示すヒントを提供するために設計されています。タイミング以外の観測可能な動作はありません。
基礎となるアーキテクチャのベストプラクティスがスピンループ内で pause または yield 命令を推奨している場合、実装はそのような命令を実装することが期待されます。たとえば、Intel Optimization Manual は pause 命令を推奨しています。
実装には、一時停止する最大時間について、数十から数百ナノ秒程度の内部上限を設けることが推奨されます。
関数呼出しのオーバーヘッドにより、最適化コンパイラー内でインライン化されたこのメソッドの呼出しが、インライン化されていない呼出しとは異なる時間待機することは合理的です。
この関数は呼び出されたとき、次の手順を実行します。
この関数は呼び出されたとき、次の手順を実行します。
この関数は周囲の agent を wait queue に入れて、通知されるか待機が timeout するまで一時停止し、それらのケースを区別する String を返します。
呼び出されたとき、次の手順を実行します。
この関数は、呼出し元の agent が通知されるか timeout に達したときに解決される Promise を返します。
呼び出されたとき、次の手順を実行します。
この関数は呼び出されたとき、次の手順を実行します。
^, xBytes, yBytes) を返す。このプロパティは属性 { [[Writable]]:
JSON オブジェクトは:
parse および stringify を含みます。new 演算子でJSON Data Interchange Format は ECMA-404 で定義されています。この仕様で使用される JSON interchange format は、ECMA-404 で説明されるものと正確に同じです。JSON.parse および JSON.stringify の適合実装は、形式への削除または拡張を行うことなく、ECMA-404 で説明される正確な interchange format をサポートしなければなりません。
この関数は呼び出されたとき、次の手順を実行します。
この関数は JSON テキスト(JSON 形式の String)を解析し、
省略可能な reviver パラメーターは、結果をフィルターおよび変換できる関数です。解析によって生成された各値について、reviver は3つの引数(関連付けられた
この関数の
JSON.parse の適合実装が JSON 文法を拡張することは許可されません。実装が変更または拡張された JSON interchange format をサポートしたい場合、別の parse 関数を定義することによって行わなければなりません。
有効な JSON テキストは ECMAScript
ただし、
オブジェクト内に重複する名前の String が存在する場合、同じキーについて字句的に先行する値は上書きされなければなりません。
JSON Parse Record は、JSON テキストから解析された値の初期状態を記述するために使用される
JSON Parse Record は
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[ParseNode]] | a |
context の |
| [[Key]] | a property name | [[Value]] が関連付けられている |
| [[Value]] | an ECMAScript language value | [[ParseNode]] の評価によって生成された値。 |
| [[Elements]] | a |
[[Value]] が Array である場合、[[Value]] の要素に対応する |
| [[Entries]] | a |
[[Value]] が Array でない Object である場合、[[Value]] のエントリに対応する |
{"a":"lost","a":"kept"} など)、結果として得られる ECMAScript オブジェクトの対応するプロパティの値は、その名前を持つ最後のペアによって規定される。このアルゴリズムは、[[Delete]] または
呼び出されたとき、次の手順を実行します。
JSON.parse 組込みnumber token は負の値を表す場合がある。ECMAScript では、否定は - に続いて派生 この関数は、文字列、数値、真偽値、または null 値の raw JSON テキストを表すオブジェクトを返します。
この関数は、
呼び出されたとき、次の手順を実行します。
この関数の
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) で閉じられる形式で表現されます。プロパティは、
JSON Serialization Record は、JSON 形式へのシリアライズを可能にするために使用される
JSON Serialization Record は
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[ReplacerFunction]] | a function object or |
オブジェクトプロパティの置換値を提供できる関数(JSON.stringify の replacer パラメーターから)。 |
| [[PropertyList]] | either a |
非配列オブジェクトをシリアライズするときに含める |
| [[Gap]] | a String | インデントの単位(JSON.stringify の space パラメーターから)。 |
| [[Stack]] | a |
シリアライズ処理中のネストされたオブジェクトの集合。循環構造を検出するために使用されます。 |
| [[Indent]] | a String | 現在のインデント。 |
| コードポイント | 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 |
\\
|
このプロパティは属性 { [[Writable]]: