TC39 与 ECMAScript 提案
TC39 是什么?
TC39 全称 Ecma International, Technical Committee 39(ECMA国际技术委员会39),是制定 ECMA-262 号标准制的组织,由各个主流浏览器厂商的代表构成。
可能有些小伙伴会有点懵逼,Ecma International 是什么?TC39 为啥是39,而不是 TC38,39代表着什么?ECMA-262 又是啥,它跟 ECMAScript 又有什么关系?ECMAScript 跟 Javascript 又有什么关系?下面我就来整理了一下。
Ecma International
以下摘自维基百科:
Ecma国际(英语:Ecma International)是一家国际性会员制度的信息和电信标准组织。1994年之前,名为欧洲计算机制造商协会(European Computer Manufacturers Association)。因为计算机的国际化,组织的标准牵涉到很多其他国家,因此组织决定改名表明其国际性。现名称已不属于首字母缩略字。
组织在1961年的日内瓦创建为了标准化欧洲的计算机系统。在欧洲制造、销售或开发计算机和电信系统的公司都可以申请成为会员。
由此我们知道,Ecma国际是1961年成立的一家制定计算机标准的机构。
ECMAScript
ECMAScript 是一种由Ecma国际在标准 ECMA-262 中定义的脚本语言规范。和 ECMAScript 有关的标准还有 ECMA-262,ECMA-290,ECMA-327,ECMA-357,ECMA-402,ECMA-404,ECMA-414等等。其中 ECMA-290,ECMA-327,ECMA-357 等没有推广开来,被废弃。
相关标准
ECMA-262:ECMAScript 语言规范本身ECMA-402:基于 ECMAScript 5 或者之后版本的一些国际化 API 标准ECMA-404:JSON 规范ECMA-414:规定了哪些规范是和 ECMAScript 有关的。目前内部就包含了 262,402 和 404
历史版本
| Ver. | Date | Difference |
|---|---|---|
| 1.0 | 1997/06 | 首版 |
| 2.0 | 1998/06 | 格式修正,以使得其形式与ISO/IEC16262国际标准一致 |
| 3.0 | 1999/12 | 强大的正则表达式,更好的词法作用域链处理,新的控制指令,异常处理,错误定义更加明确,数据输出的格式化及其它改变 |
| 4.0 | 放弃 | 由于关于语言的复杂性出现分歧,第4版本被放弃,其中的部分成为了第5版本及Harmony的基础 |
| 5.0 | 2009/12 | 新增“严格模式(strict mode)”,一个子集用作提供更彻底的错误检查,以避免结构出错。澄清了许多第3版本的模糊规范,并适应了与规范不一致的真实世界实现的行为。增加了部分新功能,如getters及setters,支持JSON以及在对象属性上更完整的反射 |
| 5.1 | 2011/06 | ECMAScript标5.1版形式上完全一致于国际标准ISO/IEC 16262:2011 |
| 6.0 | 2015/06 | ECMAScript 2015(ES2015),第 6 版,最早被称作是 ECMAScript 6(ES6),添加了类和模块的语法,其他特性包括迭代器,Python风格的生成器和生成器表达式,箭头函数,二进制数据,静态类型数组,集合(maps,sets 和 weak maps),promise,reflection 和 proxies。作为最早的 ECMAScript Harmony 版本,也被叫做ES6 Harmony |
| 7.0 | 2016/06 | ECMAScript 2016(ES2016),第 7 版,多个新的概念和语言特性 |
| 8.0 | 2017/06 | ECMAScript 2017(ES2017),第 8 版,多个新的概念和语言特性 |
| 9.0 | 2018/06 | ECMAScript 2018 (ES2018),第 9 版,包含了异步循环,生成器,新的正则表达式特性和 rest/spread 语法 |
| 10.0 | 2019/06 | ECMAScript 2019 (ES2019),第 10 版 |
TC39 Process
每一项新特性,要最终纳入 ECMAScript 规范中,TC39 拟定了一个处理过程,称为 TC39 Process,其中共包含5个阶段。
Stage 0: Strawman(稻草人阶段)
一种推进ECMAScript发展的自由形式,任何TC39成员,或者注册为TC39贡献者的会员,都可以提交。
Stage 1: Proposal(提案阶段)
该阶段产生一个正式的提案。
- 确定一个带头人来负责该提案,带头人或者联合带头人必须是TC39的成员。
- 描述清楚要解决的问题,解决方案中必须包含例子,API以及关于相关的语义和算法。
- 潜在问题也应该指出来,例如与其他特性的关系,实现它所面临的挑战。
- polyfill和demo也是必要的。
Stage 2: Draft(草案阶段)
草案是规范的第一个版本,与最终标准中包含的特性不会有太大差别。草案之后,原则上只接受增量修改。
- 草案中包含新增特性语法和语义的,尽可能的完善的形式说明,允许包含一些待办事项或者占位符。
- 必须包含2个实验性的具体实现,其中一个可以是用转译器实现的,例如Babel。
Stage 3: Candidate(候选阶段)
候选阶段,获得具体实现和用户的反馈。此后,只有在实现和使用过程中出现了重大问题才会修改。
- 规范文档必须是完整的,评审人和ECMAScript的编辑要在规范上签字。
- 至少要有两个符合规范的具体实现。
Stage 4: Finished(完成阶段)
已经准备就绪,该特性会出现在年度发布的规范之中。
- 通过 Test-262 的验收测试。
- 有2个通过测试的实现,以获取使用过程中的重要实践经验。
- ECMAScript的编辑必须规范上的签字。