什么是ECMAScript(来龙去脉娓娓道来)?
作者:冯天然
链接:https://zhuanlan.zhihu.com/p/22557749
来源:知乎
什么是ECMAScript
首先既然要更好的了解,起码得先说说什么是 ECMAScript。
ECMAScript 是一种由 ECMA国际(前身为欧洲计算机制造商协会)通过 ECMA-262 标准化的脚本程序设计语言。
看起来出现了很多奇怪的名词,ECMA国际?ECMA-262?黑人问号???
那么然后来稍微介绍一下什么是 ECMA国际。
ECMA国际
Ecma国际(Ecma International)是一家国际性会员制度的信息和电信标准组织。1994年之前,名为欧洲计算机制造商协会(European Computer Manufacturers Association)。因为计算机的国际化,组织的标准牵涉到很多其他国家,因此组织决定改名表明其国际性。现名称已不属于首字母缩略字。
与国家政府标准机构不同,Ecma国际是企业会员制的组织。组织的标准化过程比较商业化,自称这种营运方式减少官僚追求效果。
上面这些信息都可以在 WIKI 中找到。大家可以很明确的看到,Ecma国际是一家和企业密切相连的组织,所以 Ecma国际制定的规范都是由各类企业来做主要的制定和推广。
那么既然说到了 Ecma国际,那么它都做了些什么事呢?
其实 Ecma国际负责了很多标准的制定,比如有如下这些规范。大家可以看到这里面有我们今天的主角,ECMAScript 规范。
CD-ROM格式(之后被国际标准化组织批准为ISO 9660)
C#语言规范
C++/CLI语言规范
通用语言架构(CLI)
ECMAScript语言规范(JavaScript)
Eiffel语言
电子产品环境化设计要素
Universal 3D标准
OOXML
Dart语言规范
JAVASCRIPT的诞生
在说 ECMA262 之前,我们先来讲讲 javascript 的历史。
在1994年,Netscape 发布了 Navigator0.9,但是因为那个时候的浏览器缺乏和用户有良好交互的能力。所以 Netscape 急切渴望一门可以在浏览器中运行,可以提供一定用户交互的语言。
然后在1995年,Netscape 让 Brendan Eich 去开发这门语言。然而,javascript 诞生了。
然而在此之后,Microsoft 推出了一门类似的语言,JScript。
Netscape 为了提升 javascript 的竞争力,于是将 javascript 提供给 ECMA组织 进行标准化。
然后,1997年7月,ECMA262 标准出台。
时隔14年之后,ECMA-262 标准也被另一个国际标准化组织 ISO(International Organization for Standardization)在2011年6月批准,标准号是 ISO-16262。
ECMAScript 作为一门脚本程序设计语言标准,并不只有 javascript 这一种实现,它也有很多的方言实现。比如有下面这些语言:
JavaScript
Ejscript
JScript .NET
ActionScript
DMDScript
CriScript
InScript
飞速发展和稳定期
在 ECMAScript 规范初版发布后不久。
1998年6月,ECMAScript 2.0 发布。
1999年12月,ECMAScript 3.0 发布。
这时,ECMAScript 规范本身也相对比较完善和稳定了,但是接下来的事情,就比较悲剧了。
2007年10月。。。。ECMAScript 4.0 草案发布。
这次的新规范,历时颇久,规范的新内容也有了很多争议。
在制定ES4的时候,是分成了两个工作组同时工作的。
一边是以 Adobe, Mozilla, Opera 和 Google为主的 ECMAScript 4 工作组。
一边是以 Microsoft 和 Yahoo 为主的 ECMAScript 3.1 工作组。
ECMAScript 4 的很多主张比较激进,改动较大。而 ECMAScript 3.1 则主张小幅更新。
最终经过 TC39 的会议,决定将一部分不那么激进的改动保留发布为 ECMAScript 3.1,然后将一部分比较激进的部分放置到 ES.NEXT 中,命名为 Harmony(和谐),留待以后再进行商榷。接下来,ECMAScript 3.1 变成了 ECMAScript 5,而 ES.NEXT 中的那些特性,则有着相当一部分被ECMAScript 6,也就是 ECMAScript 2015 所吸收了。所以说虽然 ECMAScript 4 被废弃了,但是它终究还是通过另一种方式活了下来。
然后,2009年12月,ECMAScript 5 发布。
2011年6月,ECMAScript 5.1 发布。
TC39
中间插个小话题。其实在前面大家仔细看,会发现有个名词,TC39。为了接下来的内容,所以先来解释一下 TC39 是什么。
TC(Technical Committees)
TG(Task Groups)
在ECMA国际,每个标准都会有一个 TC 来负责,而一个 TC 中可能会有不同的 TG 来负责不同的工作。而负责 ECMA262,也就是我们所说的 ECMAScript 的就是 TC39(以前叫 TC39-TG1)。
Ecma organisation在这里我们可以看到各个 TC,并且可以查看其负责的标准。
ECMAScript 2015
接下来是一部重头戏。
2015年6月,ECMAScript 6,也就是 ECMAScript 2015 发布了。
新的规范中,带有大量 ECMAScript 4 中激进特性,以及常年的提案积累。所以 ECMAScript 6 里和前一版标准有了非常大的差别。
从 ECMAScript 6 开始,标准有了新的,更加规范化和快速的制定流程。面对着每年一次的,频繁的标准更替,再采用1234的版本号来标注规范显得不太合适。所以从 ECMAScript 6 开始,就开始采用年号来做版本。即 ECMAScript 2015。
新的规范制定流程
在新的规范制定流程中,要求成文标准要从事实标准中诞生,实现先于标准存在,大家可以在接下来的流程说明中看出来。
每个新特性,从开始到完成一共要经历5个阶段。
strawman (稻草人)阶段
任何人都可以提交pull request到GitHub - tc39/ecma262: Status, process, and documents for ECMA262
可以是一个提议,想法,初步描述
proposal(提案)阶段
TC39制定成员作为 champion
TC39审阅通过
有实现的 Demo 或者 Polyfill
初步描写标准的语义语法算法复杂度解决的问题等
Draft(草案)阶段
有两个或两个以上的实现(包括babel这类的转译实现)
使用正式的语言描述该语法,api等
candidate(候选)阶段
至少2个实现,可以为实验性实现
ECMAScript spec editor 通过审核
TC39 review 通过
文本编写完成
Finished(完成)阶段
编写 test 262 测试用例
通过两个实现该特性的内核测试
ECMAScript spec editor 通过审核
开发者表示支持和认可
接下来,在每年的3月和9月,都会提交新特性的申请,在 ECMA General Assembly 通过以后,被添加到标准中去。
值得注意的是,TC39 每年的工作日程也是规划好了的。
每年的3月,TC39 会召开会议,将完成的特性添加到标准中。
每年的4月到6月,会由 ECMA CC 和 ECMA CG 来做 Review。
每年的7月,批准通过新标准并且发布。所以,ECMAScript 2016 标准,其实也已经正式发布了,虽然只新增了两个特性。我们现在已经可以开始看 ECMAScript 2017 的草案了。
迷茫的新特性
对于有些人来说,前端的更新总是很突兀,很让人迷茫。
但是其实不是的。变化总是一点一点发生的。
GitHub - tc39/proposals: Tracking ECMAScript Proposals
我们可以在 TC39 的 Github 仓库中找到完成了,废弃的,以及正在进行中的提案。
多去关注这些东西,对于很多新事物的到来,我们也就不会有多惊讶了。
别的 ECMA 标准?
和 ECMAScript 有关的标准只有 ECMA262 吗?
其实不是。和 ECMAScript 有关的标准有 ECMA262,ECMA290,ECMA327,ECMA357,ECMA402,ECMA404,ECMA414等等。
其中290,327,357等等没有推广开来,被废弃。
ECMA 262 是语言规范本身。
ECMA 402 则是制定一些基于 ECMAScript 5 或者之后版本的一些国际化 API 标准。
ECMA 404 是 JSON 规范。
ECMA 414 则规定了哪些规范是和 ECMAScript 有关的。目前内部就包含了 262,402和404。
备注
如果大家想更好的关注标准的变化,可以订阅 TC39 的邮件组,关注 TC39 的 Github,并且在 Twitter 上关注 TC39 的成员。
引用
ECMAScript
Welcome to Ecma International
John Resig - ECMAScript Harmony
如何评价 ECMAScript 2016(ES7)只新增2个特性? - 张秋怡的回答
The TC39 Process