Skip to content

Latest commit

 

History

History
90 lines (47 loc) · 4.11 KB

[翻译]探索ES2016和ES2017 - 背景介绍.md

File metadata and controls

90 lines (47 loc) · 4.11 KB

探索ES2016和ES2017 - 背景介绍

  1. 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 更多阅读

  1. FAQ:ES2016和ES2017

ES2016规范这么小恰恰证明了TC39的新规范流程:

  • 新特性已经完全准备好,并且经过两家厂商的实现自测通过;
  • 规范的发布将会每年一更新,增量发行;

####参考资料

  1. 翻译章节链接