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.DateDifference
1.01997/06首版
2.01998/06格式修正,以使得其形式与ISO/IEC16262国际标准一致
3.01999/12强大的正则表达式,更好的词法作用域链处理,新的控制指令,异常处理,错误定义更加明确,数据输出的格式化及其它改变
4.0放弃由于关于语言的复杂性出现分歧,第4版本被放弃,其中的部分成为了第5版本及Harmony的基础
5.02009/12新增“严格模式(strict mode)”,一个子集用作提供更彻底的错误检查,以避免结构出错。澄清了许多第3版本的模糊规范,并适应了与规范不一致的真实世界实现的行为。增加了部分新功能,如getters及setters,支持JSON以及在对象属性上更完整的反射
5.12011/06ECMAScript标5.1版形式上完全一致于国际标准ISO/IEC 16262:2011
6.02015/06ECMAScript 2015(ES2015),第 6 版,最早被称作是 ECMAScript 6(ES6),添加了类和模块的语法,其他特性包括迭代器,Python风格的生成器和生成器表达式,箭头函数,二进制数据,静态类型数组,集合(maps,sets 和 weak maps),promise,reflection 和 proxies。作为最早的 ECMAScript Harmony 版本,也被叫做ES6 Harmony
7.02016/06ECMAScript 2016(ES2016),第 7 版,多个新的概念和语言特性
8.02017/06ECMAScript 2017(ES2017),第 8 版,多个新的概念和语言特性
9.02018/06ECMAScript 2018 (ES2018),第 9 版,包含了异步循环,生成器,新的正则表达式特性和 rest/spread 语法
10.02019/06ECMAScript 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的编辑必须规范上的签字。

Reference