实现和发布 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.h
、gin/gin_features.cc
和 gin/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
)。