实现和发布 JavaScript/WebAssembly 语言特性

一般来说,V8 遵循 Blink 意图流程,用于已定义的基于共识的 JavaScript 和 WebAssembly 语言特性标准。V8 特定的勘误表列在下面。请遵循 Blink 意图流程,除非勘误表另有说明。

如果您对 JavaScript 特性有任何疑问,请发送电子邮件至 [email protected][email protected]

对于 WebAssembly 特性,请发送电子邮件至 [email protected][email protected]

勘误表 #

JavaScript 特性通常要等到 Stage 3+ #

作为经验法则,V8 等待 JavaScript 特性提案推进到 TC39 中的 Stage 3 或更高阶段 才会实施。TC39 有自己的共识流程,Stage 3 或更高阶段表明 TC39 代表(包括所有浏览器供应商)之间明确达成共识,即特性提案已准备好实施。这种外部共识流程意味着 Stage 3+ 特性不需要发送意图电子邮件,除了“意图发布”电子邮件。

TAG 审查 #

对于较小的 JavaScript 或 WebAssembly 特性,不需要 TAG 审查,因为 TC39 和 Wasm CG 已经提供了重要的技术监督。如果特性很大或跨领域(例如,需要更改其他 Web 平台 API 或修改 Chromium),建议进行 TAG 审查。

V8 和 blink 标志都是必需的 #

实施特性时,需要 V8 标志和 blink base::Feature

Blink 特性是必需的,以便 Chrome 可以在紧急情况下关闭特性,而无需分发新的二进制文件。这通常在 gin/gin_features.hgin/gin_features.ccgin/v8_initializer.cc 中实现。

模糊测试是发布的必要条件 #

JavaScript 和 WebAssembly 特性必须进行至少 4 周的模糊测试,或一个 (1) 发布里程碑,并且所有模糊测试错误都已修复,才能发布。

对于代码完整的 JavaScript 特性,请通过将特性标志移至 src/flags/flag-definitions.h 中的 JAVASCRIPT_STAGED_FEATURES_BASE 宏来开始模糊测试。

对于 WebAssembly,请参阅 WebAssembly 发布清单

Chromestatus 和审查关口 #

Blink 意图流程包括一系列审查关口,这些关口必须在特性在 Chromestatus 中的条目上获得批准,然后才能发送“意图发布”电子邮件,以寻求 API 所有者的批准。

这些关口针对的是 Web API,某些关口可能不适用于 JavaScript 和 WebAssembly 特性。以下是广泛的指导。具体细节因特性而异;不要盲目地应用指导!

隐私 #

大多数 JavaScript 和 WebAssembly 特性不会影响隐私。很少情况下,特性可能会添加新的指纹向量,这些向量会泄露有关用户操作系统或硬件的信息。

安全 #

虽然 JavaScript 和 WebAssembly 是安全漏洞中常见的攻击载体,但大多数新特性不会增加额外的攻击面。 模糊测试 是必需的,并且可以减轻部分风险。

影响已知流行攻击载体的特性,例如 JavaScript 中的 ArrayBuffer,以及可能启用侧信道攻击的特性,需要额外的审查,并且必须进行审查。

企业 #

在 TC39 和 Wasm CG 中的标准化过程中,JavaScript 和 WebAssembly 特性已经经历了大量的向后兼容性审查。特性故意向后不兼容的情况极其罕见。

对于 JavaScript,最近发布的特性也可以通过 chrome://flags/#disable-javascript-harmony-shipping 禁用。

可调试性 #

JavaScript 和 WebAssembly 特性的可调试性因特性而异。仅添加新内置方法的 JavaScript 特性不需要额外的调试器支持,而添加新功能的 WebAssembly 特性可能需要大量的额外调试器支持。

有关更多详细信息,请参阅 JavaScript 特性调试清单WebAssembly 特性调试清单

如有疑问,此关口适用。

测试 #

对于 JavaScript 特性,Test262 测试足以替代 WPT,而 WebAssembly 规范测试足以替代 WebAssembly 特性。

添加 Web 平台测试 (WPT) 不是必需的,因为 JavaScript 和 WebAssembly 语言特性有自己的可互操作测试库,这些库由多个实现运行。如果您认为有益,可以随意添加一些。

对于 JavaScript 特性,需要在 Test262 中进行明确的正确性测试。请注意,暂存目录 中的测试就足够了。

对于 WebAssembly 特性,需要在 WebAssembly 规范测试库 中进行明确的正确性测试。

对于性能测试,JavaScript 已经成为大多数现有性能基准(如 Speedometer)的基础。

抄送对象 #

所有“意图 $something”电子邮件(例如,“意图实施”)除了抄送 [email protected] 外,还应抄送 [email protected]。这样,其他 V8 嵌入器也会了解情况。

规范库链接 #

Blink 意图流程需要一个解释器。您可以随意链接到相应的规范库,而不是编写新的文档(例如,import.meta)。