本章解释了所谓的 *TC39 流程*,它规定了从 ECMAScript 2016 (ES7) 开始,ECMAScript 特性是如何设计的。
答案:TC39(技术委员会 39)。
TC39 是推动 JavaScript 发展的委员会。其成员是公司(其中包括所有主要的浏览器供应商)。TC39 定期举行会议,成员公司派出的代表和受邀专家都会参加会议。会议纪要在线提供,可以让您很好地了解 TC39 的运作方式。
有时(甚至在本书中),您会看到 *TC39 成员* 指的是一个人。这意味着:TC39 成员公司派出的代表。
值得注意的是,TC39 的运作方式是协商一致:决策需要绝大多数人同意,并且没有人强烈反对到足以否决。对于许多成员来说,协议会导致真正的义务(他们必须实现特性等)。
ECMAScript 的最新版本 ES6 规模庞大,并且在 ES5 发布近 6 年后才标准化(2009 年 12 月与 2015 年 6 月)。在版本之间间隔这么长时间有两个主要问题
因此,从 ECMAScript 2016 (ES7) 开始,发布将更加频繁,因此规模也会小得多。每年将发布一个版本,其中将包含在年度截止日期前完成的所有特性。
每个 ECMAScript 特性提案都要经历以下 *成熟度阶段*,从阶段 0 开始。从一个阶段到下一个阶段的进展必须得到 TC39 的批准。
**它是什么?** 一种自由提交 ECMAScript 演进想法的方式。提交者必须是 TC39 成员或已注册为 TC39 贡献者的非成员。
**需要什么?** 文档必须在 TC39 会议上进行审查(来源),然后添加到阶段 0 提案页面。
**它是什么?** 特性的正式提案。
**需要什么?** 必须确定一个负责该提案的所谓 *负责人*。负责人或联合负责人必须是 TC39 的成员(来源)。必须用文字描述该提案解决的问题。必须通过示例、API 以及对语义和算法的讨论来描述解决方案。最后,必须确定提案的潜在障碍,例如与其他特性的交互和实现挑战。在实现方面,需要 polyfill 和演示。
**接下来是什么?** 通过接受阶段 1 的提案,TC39 宣布愿意审查、讨论该提案并为其做出贡献。展望未来,预计该提案将发生重大变化。
**它是什么?** 将包含在规范中的第一个版本。此时,该特性很可能会最终包含在标准中。
**需要什么?** 现在,该提案必须另外包含对该特性的语法和语义的正式描述(使用 ECMAScript 规范的正式语言)。描述应尽可能完整,但可以包含待办事项和占位符。需要该特性的两个实验性实现,但其中一个可以在 Babel 等转译器中。
**接下来是什么?** 从现在开始,预计只会进行增量更改。
**它是什么?** 提案基本完成,现在需要来自实现和用户的反馈才能进一步推进。
**需要什么?** 规范文本必须完整。指定的审阅者(由 TC39 任命,而不是由负责人任命)和 ECMAScript 规范编辑器必须签署规范文本。必须至少有两个符合规范的实现(不必默认启用)。
**接下来是什么?** 此后,只应针对实现及其使用过程中提出的关键问题进行更改。
**它是什么?** 提案已准备好包含在标准中。
**需要什么?** 在提案达到此阶段之前,需要以下内容
**接下来是什么?** 该提案将尽快包含在 ECMAScript 规范中。当规范作为标准进行年度批准时,该提案将作为其中的一部分获得批准。
如您所见,只有当提案达到阶段 4 时,您才能确定某个特性将包含在标准中。然后,它可能包含在下一个 ECMAScript 版本中,但也并非 100% 确定(可能需要更长时间)。因此,您不能再将提案称为(例如)“ES7 特性”或“ES2016 特性”。因此,我最喜欢的两种编写文章和博客文章标题的方式是
如果提案处于阶段 4,我可以将其称为 ES20xx 特性,但最安全的做法是等到规范编辑器确认它将包含在哪个版本中。Object.observe
是一个 ECMAScript 提案的例子,它已经发展到阶段 2,但最终被撤回。
以下是本章的重要参考资料
其他阅读材料