?uem/p1-90`本节、
读-修改-写修改函数是一个数学函数,表示为接受两个
为了帮助验证读-修改-写修改函数的算法步骤构成纯数学函数,建议遵循以下编辑约定:
固定长度 ArrayBuffer 是创建后字节长度不能改变的 ArrayBuffer。
可调整大小的 ArrayBuffer 是创建后可以通过调用
创建的 ArrayBuffer 对象种类取决于传递给
realloc。分离 ArrayBuffer 实例会将用作其后备存储的
宿主定义的抽象操作 HostResizeArrayBuffer,接收参数 buffer (ArrayBuffer) 和 newByteLength (非负整数);返回值:(
HostResizeArrayBuffer 的实现必须符合以下要求:
HostResizeArrayBuffer 的默认实现是返回
ArrayBuffer
extends 子句的值。希望继承指定 ArrayBuffer 行为的子类super 调用,以创建并初始化具有支持 ArrayBuffer.prototype 内置方法所必需内部状态的子类实例。调用时,此函数执行以下步骤:
ArrayBuffer
调用时,此函数执行以下步骤:
ArrayBuffer.prototype 的初始值是
此属性具有特性 { [[Writable]]:
ArrayBuffer[%Symbol.species%] 是
此函数的
ArrayBuffer 原型对象:
ArrayBuffer.prototype.byteLength 是
ArrayBuffer.prototype.constructor 的初始值是
ArrayBuffer.prototype.detached 是
ArrayBuffer.prototype.maxByteLength 是
ArrayBuffer.prototype.resizable 是
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
此属性具有特性 { [[Writable]]:
ArrayBuffer 实例从
[[ArrayBufferData]] 为
[[ArrayBufferDetachKey]] 被设置为
以下是供使用可调整大小 ArrayBuffer 的 ECMAScript 程序员参考的指南。
建议尽可能在程序的部署环境中对其进行测试。不同硬件设备之间可用的物理内存量差异很大。同样,不同硬件设备以及不同操作系统之间的虚拟内存子系统也有很大差异。在 64 位桌面 Web 浏览器上运行而不出现内存不足错误的应用程序,可能会在 32 位移动 Web 浏览器上耗尽内存。
为可调整大小 ArrayBuffer 的
请
以下是供实现可调整大小 ArrayBuffer 的 ECMAScript 实现者参考的指南。
可调整大小 ArrayBuffer 可以通过调整大小时进行复制、通过预先保留虚拟内存实现原地增长,或者针对
如果
如果
固定长度 SharedArrayBuffer 是创建后字节长度不能改变的 SharedArrayBuffer。
可增长的 SharedArrayBuffer 是创建后可以通过调用
创建的 SharedArrayBuffer 对象种类取决于传递给
宿主定义的抽象操作 HostGrowSharedArrayBuffer,接收参数 buffer (SharedArrayBuffer) 和 newByteLength (非负整数);返回值:(
HostGrowSharedArrayBuffer 的实现必须符合以下要求:
上述第二项要求有意没有明确规定如何或何时读取 buffer 的当前字节长度。由于字节长度必须通过底层硬件上的原子读-修改-写操作进行更新,使用 load-link/store-conditional 或 load-exclusive/store-exclusive 指令对的架构可能希望在指令流中让成对指令彼此靠近。因此,
这与
HostGrowSharedArrayBuffer 的默认实现是返回
SharedArrayBuffer
extends 子句的值。希望继承指定 SharedArrayBuffer 行为的子类super 调用,以创建并初始化具有支持 SharedArrayBuffer.prototype 内置方法所必需内部状态的子类实例。当
与 ArrayBuffer 不同,SharedArrayBuffer 无法被分离,并且其内部 [[ArrayBufferData]] 槽永远不会是
调用时,此函数执行以下步骤:
SharedArrayBuffer
SharedArrayBuffer.prototype 的初始值是
此属性具有特性 { [[Writable]]:
SharedArrayBuffer[%Symbol.species%] 是
此函数的
SharedArrayBuffer 原型对象:
SharedArrayBuffer.prototype.byteLength 是
SharedArrayBuffer.prototype.constructor 的初始值是
调用时,此方法执行以下步骤:
禁止比较交换更新长度时出现虚假失败。如果新长度的边界检查通过且实现未耗尽内存,则始终会向
对 SharedArrayBuffer.prototype.grow 的并行调用具有全序。例如,考虑两个竞争调用:sab.grow(10) 和 sab.grow(20)。两个调用中的一个必定会赢得竞争。即使 sab.grow(20) 先发生,sab.grow(10) 调用也绝不会缩小 sab;在这种情况下,它会改为抛出 RangeError。
SharedArrayBuffer.prototype.growable 是
SharedArrayBuffer.prototype.maxByteLength 是
调用时,此方法执行以下步骤:
此属性具有特性 { [[Writable]]:
SharedArrayBuffer 实例从
与 ArrayBuffer 实例不同,SharedArrayBuffer 实例永远不会被分离。
以下是供使用可增长 SharedArrayBuffer 的 ECMAScript 程序员参考的指南。
建议尽可能在程序的部署环境中对其进行测试。不同硬件设备之间可用的物理内存量差异很大。同样,不同硬件设备以及不同操作系统之间的虚拟内存子系统也有很大差异。在 64 位桌面 Web 浏览器上运行而不出现内存不足错误的应用程序,可能会在 32 位移动 Web 浏览器上耗尽内存。
为可增长 SharedArrayBuffer 的
请
并非对可增长 SharedArrayBuffer 长度的所有加载都是同步的 u8[idx])进行边界检查的长度加载不是同步操作。通常,在没有显式同步的情况下,一次属性访问位于边界内,并不意味着同一length 和 byteLength getter 显式加载长度是同步操作。内置方法为检查
以下是供实现可增长 SharedArrayBuffer 的 ECMAScript 实现者参考的指南。
建议通过预先保留虚拟内存实现原地增长的方式实现可增长 SharedArrayBuffer。
由于增长操作可以与对可增长 SharedArrayBuffer 的内存访问并行发生,
增长后的内存从创建的那一刻起就必须表现为已清零,包括对任何并行竞争访问也是如此。这可以通过按需填零的虚拟内存页实现,或者在手动清零内存时通过谨慎同步实现。
可增长 SharedArrayBuffer 的
在没有虚拟内存的
DataView With Buffer Witness Record 是用于封装 DataView 以及所查看缓冲区的缓存字节长度的
DataView With Buffer Witness Record 具有
| 字段名称 | 值 | 含义 |
|---|---|---|
| [[Object]] | a DataView | 其缓冲区字节长度被加载的 DataView 对象。 |
| [[CachedBufferByteLength]] |
a non-negative integer or |
创建 |
DataView
extends 子句的值。希望继承指定 DataView 行为的子类super 调用,以创建并初始化具有支持 DataView.prototype 内置方法所必需内部状态的子类实例。调用时,此函数执行以下步骤:
DataView
DataView.prototype 的初始值是
此属性具有特性 { [[Writable]]:
DataView 原型对象:
DataView.prototype.buffer 是
DataView.prototype.byteLength 是
DataView.prototype.byteOffset 是
DataView.prototype.constructor 的初始值是
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
调用时,此方法执行以下步骤:
此属性具有特性 { [[Writable]]:
DataView 实例是从
本规范中不使用 [[DataView]] 内部槽的值。在规范中,仅通过该内部槽的存在来识别使用 DataView
Atomics 对象:
new 运算符一起用作Atomics 对象提供以不可分割方式(原子方式)操作共享内存数组单元的函数,以及允许
Waiter Record 是用于表示对 Atomics.wait 或 Atomics.waitAsync 的某次特定调用的
Waiter Record 具有
| 字段名称 | 值 | 含义 |
|---|---|---|
| [[AgentSignifier]] | an agent signifier |
调用 Atomics.wait 或 Atomics.waitAsync 的 |
| [[PromiseCapability]] |
a |
如果表示对 Atomics.waitAsync 的调用,则为产生的 promise,否则为 |
| [[TimeoutTime]] |
a non-negative |
可能触发超时的最早时间;使用 |
| [[Result]] |
|
调用的返回值。 |
WaiterList Record 用于说明通过 Atomics.wait、Atomics.waitAsync 和 Atomics.notify 等待和通知
WaiterList Record 具有
| 字段名称 | 值 | 含义 |
|---|---|---|
| [[Waiters]] |
a |
正在与此 WaiterList 关联的位置上等待的 Atomics.wait 或 Atomics.waitAsync 调用。
|
| [[MostRecentLeaveEvent]] |
a |
最近一次离开其 |
一个 WaiterList 中可以有多个具有相同
每个 WaiterList Record 都有一个临界区,用于在求值期间控制对该 WaiterList Record 的排他访问。同一时间只能有一个
当尝试进入
Atomics.notify)而从挂起中唤醒。additionalTimeout 允许实现根据需要延长超时,例如为了降低功耗或降低计时器分辨率以缓解时序攻击。DoWait 的每次调用中,此值都可能不同。
&、^ 或 |))、xBytes (
调用时,此函数执行以下步骤:
调用时,此函数执行以下步骤:
&, xBytes, yBytes)。调用时,此函数执行以下步骤:
调用时,此函数执行以下步骤:
调用时,此函数执行以下步骤:
此函数是一种优化原语。直观来说,如果在大小为 n 字节的数据上执行某个原子原语(compareExchange、load、store、add、sub、and、or、xor 或 exchange)的原子步骤时,Atomics.isLockFree(n) 将返回
Atomics.isLockFree(4) 始终返回
无论此函数返回什么值,所有原子操作都保证是原子的。例如,它们绝不会在操作中间发生可见操作(例如“撕裂”)。
调用时,此函数执行以下步骤:
此函数通知等待队列中处于睡眠状态的一些
调用时,它执行以下步骤:
调用时,此函数执行以下步骤:
|, xBytes, yBytes)。此函数向 CPU 提供提示,表明程序正在等待某个值时进行自旋循环。
调用时,它执行以下步骤:
此方法专为实现自旋等待循环的程序而设计,例如互斥锁中的自旋锁快速路径,用于向 CPU 提供提示,表明程序正在等待某个值时自旋。除了计时之外,它没有可观察行为。
如果底层架构的最佳实践建议在自旋循环中使用暂停或让出指令,则预期实现采用此类指令。例如,Intel Optimization Manual 建议使用 pause 指令。
鼓励实现在内部将最大暂停时间设定一个上限,大约为几十到几百纳秒。
由于函数调用存在开销,优化编译器中的内联调用与非内联调用等待不同的时间量是合理的。
调用时,此函数执行以下步骤:
调用时,此函数执行以下步骤:
此函数将
调用时,它执行以下步骤:
此函数返回一个 Promise,该 Promise 在调用
调用时,它执行以下步骤:
调用时,此函数执行以下步骤:
^, xBytes, yBytes)。此属性具有特性 { [[Writable]]:
JSON 对象:
parse 和 stringify,用于解析和构造 JSON 文本。new 运算符一起用作JSON 数据交换格式定义于 ECMA-404。本规范使用的 JSON 交换格式与 ECMA-404 所述完全相同。符合规范的 JSON.parse 和 JSON.stringify 实现必须支持 ECMA-404 中描述的精确交换格式,不得对该格式进行任何删减或扩展。
调用时,此函数执行以下步骤:
此函数解析 JSON 文本(JSON 格式的 String)并生成
可选参数 reviver 是一个可以过滤和转换结果的函数。对于解析产生的每个值,都会使用三个参数(关联的
此函数的
符合规范的 JSON.parse 实现不得扩展 JSON 文法。如果实现希望支持修改或扩展的 JSON 交换格式,则必须通过定义不同的解析函数来实现。
有效 JSON 文本是 ECMAScript
不过,由于
如果对象中存在重复的名称 String,则词法上靠前的同键值应被
JSON Parse Record 是用于描述从 JSON 文本解析出的值的初始状态的
JSON Parse Record 具有
| 字段名称 | 值 | 含义 |
|---|---|---|
| [[ParseNode]] | a Parse Node | 上下文 Parse Node。 |
| [[Key]] | a property name | 与 [[Value]] 关联的 |
| [[Value]] | an ECMAScript language value | 对 [[ParseNode]] 求值产生的值。 |
| [[Elements]] | a |
如果 [[Value]] 是 Array,则其中 |
| [[Entries]] | a |
如果 [[Value]] 是非 Array 的 Object,则其中 |
{"a":"lost","a":"kept"}),则结果 ECMAScript 对象对应属性的值由具有该名称的最后一对指定。如果 [[Delete]] 或
调用时,它执行以下步骤:
JSON.parse 内置number token 可以表示负值。在 ECMAScript 中,取负表示为一元操作,其中 - 后跟派生的 此函数返回一个对象,表示字符串、数字、布尔值或 null 值的原始 JSON 文本。
此函数返回一个以 UTF-16 编码的 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),后跟零个或多个属性,属性之间以 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]]: