Exploring ES2016 and ES2017(一):ECMAScript 新特性的诞生

TC39 (Technical Committee 39)是负责JS不断迭代进化的机构。 一项新的特性能够诞生, 必须大多成员通过并且没有成员强烈反对,然后赞成的成员就有义务去实现这项特性。

ES2015(ES6)是一个重大的发布版本,前后历时6年之久(2009.12-2015.6),为JS引入了许多新特性, 以至于即便是前端老手也要花相当时间去熟悉。之后,TC39改进了流程, 保持每年一次的发布频次, 版本包含当年所有已经完成的新特性。

ES特性诞生流程

每个提案(proposal)的诞生, 都会经历以下几个阶段:

首先, 由TC39的成员或者TC39的注册贡献者提交关于ECMAScript的任何新的Idea。 这些Idea形成文档之后在TC 39的会议上进行讨论通过之后,进入第一个阶段 stage-0 (strawman)。

然后, 针对这项 strawman 指定一个负责这项提案的champion(champion或者co-champion比须是TC39成员),将要解决的问题整理成文档,包含了例子, API, 关于语法和算法的讨论以及潜在的可能面临的问题。编程成polyfill和demos。 自此形成关于此新特性的一份正式的提案,称为state-1(proposal).

当完成stage-1时,TC 39会表达对此提案的审查、讨论和贡献意愿。下一步就期待对这项提案的修订工作了。

然后, 会出一份关于这项提案所包含特性的正式的尽可能详尽的词法语法的描述, 里面可以包含一些未完成内容和待定内容(placeholder). 与此同时, 会产生关于此提案的所有特性的两个实验性的实现版本,其中可以包括一个Babel等类型的转义实现方式。
至此,我们得到了一个关于关于此提案的初版的规范,称之为草案, stage-2(draft)

再然后, 我们就只在草案上不断地递增性地修改了。 经过一段时间的实现和用户反馈,这项提案将基本完成。 指定的TC39的审查员会(不是champion)和ECMAScript 规范编辑者将完成规范文案的编写。这时,并拥有至少两个完整的实现。 当上述工作都完成, 此提案进入了 state-3(candidate)

自此之后,此提案只能由关键实现方和使用方做进一步修改。最后还需要做几件事:
* Test 262 验收测试
* 两个遵循规范的实现通过上述测试
* Significant practical experience with the implementations(积累关于此提案的重要实践经验?)
* ECMAScript spec editor 宣布规范完成

此时, 提案达到了最后一个阶段, stage-4 (finished)

最后,就等着这项提案被纳入到正式的ECMAScript规范中去了。在经过来年的正式审批之后, 这项提案就成为了新版ECMAScript规范中的一部分了。

对特性的称谓

现在的ES6、ES7版本更多地像ES一个快照而已。 新的特性在不断的迭代,并成为新的标准。一个提案在进入到stage-4之后, 就几乎(并不绝对)是正式的标准了。因此我们称呼一个特性可以是:

ES 6 feature: xxx
ES Stage2 feature: xxx

来表名这个特性当前所处的发布阶段。