1ECMAScript功能的TC39过程
本章解释了所谓TC39工艺,它控制ECMAScript功能的设计方式,从ECMAScript 2016(ES7)开始。
1.1谁设计ECMAScript?
答:TC39(技术委员会39)。
TC39型是开发JavaScript的委员会。它的成员是公司(除其他外,所有主要的浏览器供应商)。TC39定期开会其会议由成员派来的代表和受邀专家出席。会议记录是在线可用让你了解TC39是如何工作的。
偶尔(甚至在本书中),你会看到这个词TC39成员指的是人类。那么它的意思是:TC39成员公司派出的代表。
值得注意的是,TC39是以协商一致的方式运作的:决策要求绝大多数人同意,没有人强烈反对,可以否决。对于许多成员来说,协议导致了真正的义务(他们必须实现特性等)。
1.2ECMAScript是如何设计的?
1.2.1条问题:ECMAScript 2015(ES6)版本太大
ECMAScript的最新版本ES6是一个大型的版本,它在ES5之后几乎6年(2009年12月与2015年6月)被标准化。两个版本之间的时间间隔有两个主要问题:
比发行版更早准备好的特性必须等到发行版完成。
需要很长时间才能完成的特性面临着打包的压力,因为将它们推迟到下一个版本意味着要等待很长时间。这些特性也可能延迟发布。
因此,从EcmaScript2016(ES7)开始,发布将更加频繁,结果会更小。每年将有一个版本,它将包含所有的功能,在每年的最后期限完成。
1.2.2条解决方案:TC39工艺
ECMAScript特性的每个建议都要经过以下步骤成熟阶段,从阶段0开始。从一个阶段到下一个阶段的进展必须得到TC39的批准。
1.2.2.1第0阶段:斯特劳曼
这是怎么一回事?一种提交演化ECMAScript想法的自由形式方式。提交资料必须来自TC39会员或非会员已注册为TC39贡献者.
需要什么?该文件必须在TC39会议上进行审查(来源)然后添加到包含第0阶段建议的页面.
1.2.2.2第一阶段:提案
这是怎么一回事?对该功能的正式提议。
需要什么?所谓的冠军必须确定谁对提案负责。冠军或共同冠军必须是TC39的成员(来源). 提案所解决的问题必须用散文来描述。解决方案必须通过示例、API以及语义和算法的讨论来描述。最后,必须确定提案的潜在障碍,例如与其他功能的互动和实施方面的挑战。实施方面,需要polyfill和演示。
下一步是什么?通过接受第1阶段的提案,TC39表示愿意审查、讨论并为提案作出贡献。今后,该提案预计会有重大变化。
1.2.2.3第二阶段:草稿
这是怎么一回事?规范中的第一个版本。在这一点上,该特性最终可能包含在标准中。
需要什么?提案现在还必须对特性的语法和语义有一个正式的描述(使用ECMAScript规范的形式语言)。描述应尽可能完整,但可以包含TODO和占位符。这个特性需要两个实验性的实现,但是其中一个可以在transpiler中,比如Babel。
下一步是什么?从现在开始,预计只会有增量变化。
1.2.2.4条第三阶段:候选人
这是怎么一回事?该提案已基本完成,现在需要来自实现和用户的反馈,以进一步推进。
需要什么?规范文本必须完整。指定的审阅者(由TC39指定,而不是由champion指定)和ECMAScript规范编辑器必须在规范文本上签名。必须至少有两个符合规范的实现(默认情况下不必启用)。
下一步是什么?从此以后,只应对实现及其使用引起的关键问题进行更改。
1.2.2.5第4阶段完成
这是怎么一回事?建议已准备好纳入标准。
需要什么?在提案进入这一阶段之前,需要以下几点:
测试262验收测试(大致是用JavaScript编写的语言特性的单元测试)。
两个通过测试的规范兼容的发布实现。
具有丰富的实施实践经验。
ECMAScript规范编辑器必须在规范文本上签名。
下一步是什么?该建议将尽快包含在ECMAScript规范中。当规范作为一个标准通过每年的批准时,提案也会作为其中的一部分得到批准。
1.3不要称它们为ECMAScript 20xx特性
一旦达到标准,你就可以看到它的一个阶段,你就可以看到它的功能了。那么它很可能会包含在下一个ECMAScript版本中,但也不是百分之百确定(可能需要更长的时间)。因此,你不能再称提案为“ES7功能”或“ES2016功能”。因此,我最喜欢的两种撰写文章和博客文章标题的方式是:
“ECMAScript建议:foo特性”。这篇文章的开头提到了提案的阶段。
“ES.stage2:foo功能”
如果一个建议处于第4阶段,我可以将其称为ES20xx特性,但最安全的做法是等到spec编辑器确认它将包含在哪个版本中。对象。观察是ECMAScript提案的一个例子,该提案一直进行到第2阶段,但最终被撤回。