【人人都能读标准】2. 标准的迭代模式

本文为《人人都能读标准》—— ECMAScript篇的第2篇。我在这个仓库中系统地介绍了标准的阅读规则以及使用方式,并深入剖析了标准对JavaScript核心原理的描述。


1997年,一台名为“深蓝”的电脑,在国际象棋上击败了世界冠军卡斯帕罗夫,这是人类历史上首次在与计算机的智力较量上败下阵来。

1997年,一只名为“多利”的绵羊,在苏格兰的某个实验室里“出生”了,这是人类历史上第一只成功克隆的哺乳动物。

还是1997年,一部名为“ECMAScript”的语言标准悄然发布,随后的20年,JavaScript成为了彻底颠覆人类生活方式的互联网所使用的核心脚本语言。

本节,我将为你展示ECMAScript的演化历程 —— 诞生、迭代方式、迭代历史以及历史遗留问题。

在讲迭代方式的过程中,我会使用一个实际的例子,给你“可视化”一个新的语言特性是如何“百炼成钢”才进入标准的;本节的最后部分,我会为你展示如何使用标准提供的test262测试包自测自家浏览器对标准的实现程度,而对于那些未实现的部分,我们都有哪些主要的应对方案。


标准的诞生:为什么叫ECMAScript?

ECMAScript was always an unwanted trade name that sounds like a skin disease. —— Brendan Eich

ECMAScript一直是一个不受欢迎的商用名,听起来就像是一种皮肤病。 —— 布兰登·艾克

也许你跟我有过同样的困惑,即然ECMAScript标准是JavaScript的规范,为什么不干脆直接叫“JavaScript”?

我们可以从ECMAScript标准的诞生过程找到答案。

1995年,网景公司的一名工程师布兰登·艾克(Brendan Eich)用十天的时间创造了一门可以在浏览器上运行的脚本语言,这个语言最初命名为“Mocha”,然后改为“LiveScript”,最后决定为“JavaScript”。

1996年,微软发布了他们自己版本的JavaScript,叫JScript,JScript可以在微软的IE3上运行。

为了避免一场脚本语言的战争,1997年,网景公司找到欧洲计算机制造商协会(European Computer Manufacturers Association,简称ECMA) 来标准化JavaScript。在网景和微软的各种争论与妥协下,最终决定以「ECMAScript」来命名JavaScript的标准,即便布兰登老爷子觉得这听起来就像是一种皮肤病。

ECMA协会以ECMA-262编号ECMAScript标准,并任命tc39技术委员会负责制定这份标准。

随后,ECMAScript就开始了自己的野蛮生长。从1997年第一版ECMAScript的发布,到我编写这本书的时候,ECMAScript已经出到第14版了,并成为了世界上最多人使用的通用编程语言之一。

在本书,ECMAScript与JavaScript会交替使用,它们表达的都是同一个意思。


标准的迭代流程

从es6往后开始,ECMAScript标准就开源了它的开发流程。它在github上新建了一个仓库,任何人都可以在这里提交语言的bug、标准中的表达错误以及其他优化的内容。

ECMA协会还标准化了语言的迭代流程:

stage-summary

任何人都可以以任何形式提出增加或修改语言特性的提议;对于那些社区中反响热烈、有潜力的提议,tc39技术委员会的人会将其提交为一个提案(proposals),并进入正式的开发流程(process)。这个流程会对提案的内容进行问题建模、构建解决方案、识别潜在风险、收集社区反馈、编写规范文本、开发测试用例等等一系列的过程。整个流程会拆分为4个阶段(stage),每一个阶段的完成度以及审核的严格程度都不断提升,只有进入stage4最终阶段的提案才可以进入标准,从stage1到stage4往往需要数年时间。

每年7月份,ECMA协会就会正式发布新一版的标准,新的标准会把过去一年中进入stage4的提案集成进标准当中。

这有点类似于奥运会参赛选手的选拔过程:教练团队会把在全国各地发现的好苗子带到一个地方,并对这些好苗子进行科学的、严格的、规范的训练,而只有那些最终通过所有测试的运动员,才有资格参加奥运会。

你可以在这里看到4个stage分别的要求以及工作内容,我不打算干巴巴地给你翻译这些内容。在这里,我会以一个在2021年进入stage4、并最终进入es2022标准的提案 —— class静态块,作为例子,为你更加生动地呈现这4个阶段。

// class静态块示例:
class C {
   
  static {
   
    // ...
  }
}

关于class静态块提案的历史发展,你可以从它的github仓库commit历史中找到详细的记录,每个stage的commit节点我已经为你找出来了:

proposal-class-static-block:stage0 -> stage1 -> stage2 ->

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值