- ECMAScript新特性的TC39流程
本章主要解释了TC39的规范建立流程,TC39管理着ECMAScript新特性是如何设计产生的,从ECMAScript 2016(ES7)开始.
1.1 谁负责设计ECMAScript?
回答:TC39(技术委员会39)
TC39委员会负责推进Javascript,它的成员除个别外,均来自主流浏览器提供商。委员会会定期碰面,会议的参与者主要由厂商成员代表和专家邀请者组成,会议纪要也会公布出来,方便了解TC39的运作。
偶尔你会看到TC39成员指向的是某一个人,其实是说这个人代表了某个浏览器厂商。
有趣的是:TC39运作需要内部成员保持高度一致:每一项决议要求大部分成员赞同,并且无成员强烈反对才能通过,对成员而言,赞同意味着要在所代表的浏览器中实现这一特性,这是一项义务。
1.2 ECMAScript是如何被设计的?
1.2.1 问题:ES2015新特性太多了
最近一次发布的ES规范,即:ES6,新特性很多,并且距离上次标准化的发布时间长达6年(2009年9月 VS. 2016年6月),这么长的时间主要带来两个问题:
- 新特性的使用会早于规范的正式发布(译者注:容易出现时间差和不一致);
- 部分新特性的实现花费时间较长,如果延期到下一个规范可能需要等很久,否则会导致这个规范版本推迟好久;
因此作为改进,从ES2016(即:ES7)开始,规范的发布会更小更频繁;每年发布一个版本,这些厂商需要在截止时间前实现本年度规范中发布的所有新特性。
1.2.2 方案:TC39流程
ES新特性的每一项提议都会遵循如下的成熟度阶段,从0开始,每一个阶段的过渡都需要经TC39的批准。
1.2.2.1 阶段0:稻草人(strawman)
提交人必须是TC39的成员或者注册成为TC39贡献者,可以自由提交;TC39会议会对其进行评审,并加入到阶段0的提议文档中。
1.2.2.2 阶段1:提议(proposal)
确认提议的负责人,所解决的问题必须以文档形式说明,通过示例、API、语义算法的方式来说明解决方案,最后说明实现会遇到的潜在障碍,例如:与其它特性的交互、实现难度等。
1.2.2.3 阶段2:草案(Draft)
通过草案后,规范中将包含该特性的描述,包含:语法和语义结构,尽可能完善,但可以包含待做事项和占位符。需要两家厂商的实验性实现,其中一家可以使用类似于Babel的转换工具。
至此,新特性只允许增量式的改变;(译者注:break change是不允许的)
1.2.2.4 阶段3:候选(Candidate)
提议基本已完成,等待实现者与使用者的反馈;
1.2.2.5 阶段4:完成(Finished)
满足下面几个条件之后,该特性才会被加入正式规范中:
- Test262测试集
- 两家厂商通过测试
- 重要的实际体验提升
- 提议者签署认同
1.3 还不要过早称之为ECMAScript 20XX特性
如你所见,新特性到达阶段4之后就会被加入到正式规范中,然而并非100%。所以还是谨慎为好,勿称之为ECMAScript特性,我的文章和博客会这样写:
- ECMAScirpt提议:XXXX特性
- ECMAScript 阶段2:XXXX特性
之所以这么严谨,也是因为我们无法保证它会100%落地,举个反例:Object.observe到阶段2后就退出了。
1.4 更多阅读
- FAQ:ES2016和ES2017
ES2016规范这么小恰恰证明了TC39的新规范流程:
- 新特性已经完全准备好,并且经过两家厂商的实现自测通过;
- 规范的发布将会每年一更新,增量发行;
####参考资料