本周,Ecma 国际第 39 技术委员会(TC39)的代表们齐聚东京,由索尼互动娱乐公司(Sony Interactive Entertainment)主办,参加一年中举行的六次全体会议之一。该小组负责定义 ECMAScript(JavaScript)和相关标准,本次会议是他们的第 104 次会议。
在这些会议上,代表们通过一个结构化的流程审议推进提案,该流程引导一个想法演变成一个完全定义的功能,包括验收测试和多个实施。该流程包括六个阶段:最初的草创阶段,然后是五个 "成熟 "阶段,每个阶段都需要委员会批准。
多亏 TC39 联席主席罗布-帕尔默(Rob Palmer)在现场提供的 "ECMAScript 兴奋点 "最新消息,我们对当前提案的进展有了大致的了解。议程包括审议推进提案,以及更新和讨论处于不同阶段的其他提案。
Iterator Helpers to Stage 4
Iterator Helpers 提案已进入第 4 阶段,在这一阶段,所提议的功能已完成并准备纳入标准。该提案将不再做任何修改。该提案将并入 ECMA-262[1]:
❝迭代器是表示大型或可能是无限可枚举数据集的有用方法。然而,迭代器缺乏辅助工具,无法像数组和其他有限数据结构一样方便使用,这就导致某些问题无法更好地用数组来表示迭代器,或使用库来引入必要的辅助工具。该提案在迭代器原型上引入了一系列新方法,以实现迭代器的一般使用和消耗。
Import Attributes & JSON Modules to Stage 4
导入属性和 JSON 模块提案已进入第 4 阶段,将被纳入标准。
❝导入属性(Import Attributes)提案的前身是导入断言(Import Assertions),它为模块导入语句添加了内联语法,以便在模块指定符旁边传递更多信息。此类属性的最初应用是在 JavaScript 环境中以通用方式支持更多类型的模块,首先从 JSON 模块[2]开始。
Iterator Sequencing to Stage 2.7
迭代器排序已进入第 2.7 阶段,原则上已获批准,正在接受测试、实施或使用验证。该提案允许通过对现有迭代器排序来创建迭代器。
Regular Expression Modifiers to Stage 4
正则表达式修饰符(Regular Expression Modifiers)已进入第 4 阶段,并将被添加到标准中。它允许你更改子表达式中的活动正则表达式标志。
Structs & Shared Structs to Stage 2
Structs 和 Shared Structs 已进入第 2 阶段,委员会已选择了一个首选解决方案或解决方案空间,但该设计只是一个草案,仍有可能发生重大变化。该提案旨在引入四种共享内存特性,从而能够在 JavaScript 和网络中编写新的、高性能的应用程序,并为开发人员提供一个替代 classes 的选择,即更高的性能上限和静态可分析性(static analyzability)而非灵活性。
Math.sumPrecise to Stage 3
Math.sumPrecise[3] 提议已进入第 3 阶段,正式被推荐实施。该提案建议在 JavaScript 中添加一个求多个值之和的方法。
Extractors to Stage 2
提取器已进入第二阶段,委员会已选择了首选解决方案或解决方案空间,但该设计只是一个草案,仍有可能发生重大变化。该提案将在 ECMAScript 中引入提取器(又称 "提取器对象"),它将增强 BindingPattern 和 AssignmentPattern 的语法,以允许新的重组形式。
Promise.try to Stage 4
Promise.try 已进入第 4 阶段,并将作为标准的一部分。该提案在 JavaScript 中添加了一项名为 Promise.try 的新功能。它允许开发人员将函数封装在 Promise 中,以改进错误处理,并提供一种更直接的方法来启动 promise 链。该方法可确保立即执行传递给它的函数并返回一个 Promise,从而更容易统一处理同步异常和异步操作。
Atomics.pause to Stage 3
Atomics.pause 已进入第三阶段,正式被推荐实施:
❝为获得更好的等待效果,请添加
Atomics.pause(N)
。它会在很短的时间内执行有限时间等待,运行时可以通过适当的 CPU 提示来实现。除了计时外,它没有其他可观察到的行为。
与 Atomics.wait
不同的是,由于它不会阻塞,因此主线程和 worker 线程都可以调用它。
****在执行过程中,应根据底层架构的最佳实践,使用 CPU yielding 来实现短暂的等待。非负整数参数 N
控制暂停时间, N
值越大,暂停时间越长。当微等待本身处于循环中时,它可用于实现回退算法。
❝
Error.isError to Stage 2.7
Error.isError 已推进到 2.7 阶段,原则上已获批准,但仍在测试、实现或使用验证中。该提案为开发人员引入了一种新方法,用于测试某个值是否为错误实例。
Array.zip for Stage 1, or 2, or 2.7
Array.zip[4] 提议将于明天讨论,预计将推进到第 1、2 或 2.7 阶段。该提案将在 Array
构造函数中添加 Array.zip
和 Array.zipKeyed
静态方法。
Immutable ArrayBuffers for Stage 1
明天还将讨论不可变数组缓冲区(Immutable ArrayBuffers)提案,预计该提案将进入第 1 阶段,委员会将在该阶段花时间研究已确定的问题空间、各种可能的解决方案以及跨领域问题。它旨在创建一个不可变的缓冲区,即一个其内容不能被更改、调整大小或分离的非分离缓冲区。委员会还将讨论其他各种议题以及未取得阶段性进展的其他提案的进展情况,包括以下内容:
AsyncContext Dataview Clamped Methods Decimal Discard Bindings ESM Phase Imports Explicit Compile Hints Intl.DurationFormat JSSugar Math.emplace Measure Object Observables Porffor Smart Units Temporal
所有开放的 ECMAScript 提案[5]及其当前阶段都在 GitHub 上的表格中进行了跟踪,其中包含了最新的演示日期和责任方。如果你想了解讨论主题,包括与提案无关的主题,请查看 GitHub 上的 Ecma TC39 第 104 次会议议程[6]。
并入 ECMA-262: https://github.com/tc39/ecma262/pull/3395
[2]JSON 模块: http://github.com/tc39/proposal-json-modules
[3]Math.sumPrecise: https://github.com/tc39/proposal-math-sum
[4]Array.zip: https://github.com/tc39/proposal-array-zip
[5]所有开放的 ECMAScript 提案: https://github.com/tc39/proposals
[6]Ecma TC39 第 104 次会议议程: https://github.com/tc39/agendas/blob/main/2024/10.md