完成 ECMAScript 2015
在 2015 年 3 月的会议上,TC39 [2015b] 批准了当时的候选规范 [Wirfs-Brock et al. 2015b, c],将其提交给了 Ecma GA 大会进行最终批准。Ecma GA 在 2015 年 6 月的会议上投票批准了它 [Ecma International 2015a],并立即发布了 ECMA-262 第 6 版,是为《ECMAScript 2015 语言规范》[Wirfs-Brock 2015a]。
ECMAScript 2015 的开发和发布历时近 7 年,数百人为其开发做出了贡献。从 2008 年 7 月的会议(Harmony 工作开始之处)开始,到 2015 年 3 月的会议(候选规范获得批准之处)为止,委员会共召开了 41 次 TC39 会议。有 145 人亲自或通过电话参加了这些会议,具体参与程度不一。ES2015 的开发与 ES5/ES5.1、《ECMA-402 ECMAScript 国际化 API》、《ECMA-404 JSON 数据交换格式》以及 Test262 测试验证套件的开发相重叠。一些与会者的主要兴趣是其中的一项或多项工作。在 145 名与会者中,有 62 人只参加了一次会议,他们通常以观察员身份列席。
TC39 主席 John Neumann 和 Ecma 秘书长 István Sebestyén 为项目提供了行政上的支持,确保了会议的顺利进行。项目编辑 Allen Wirfs-Brock 在项目过程中发布了 38 份规范草案 [TC39 Harmony 2015]。有 7 人(图 47)实质上属于整个项目的技术贡献者。另有 35 名与会者(图 48)参加了 5 至 24 次会议,其中大多数人对项目作出了重要的技术贡献。在 ES2015 的开发过程中,数百名 JavaScript 开发者社区成员向 es-discuss
邮件列表 [TC39 et al. 2006] 发布了超过 36000 条消息,并在 TC39 的 bug 跟踪系统 [TC39 et al. 2016] 中,提交了 4000 多条与 ES2015 规范草案有关的工单。
Allen Wirfs-Brock (Project Editor) | Microsoft, Mozilla |
Brendan Eich | Mozilla, invited expert |
Mark S. Miller | |
Waldemar Horwat | |
Dave Herman | Northeastern Univ, Mozilla |
Douglas Crockford | Yahoo!, PayPal |
Erik Arvidsson |
图 47. TC39 技术贡献者,他们在整个 ES2015 开发工作中表现活跃。在此期间,每人至少参加了 41 次 TC39 会议中的 30 次。2009 年 5 月,Arvidsson 首次参加。Crockford 最后一次参加是在 2014 年 4 月。其余的人从头到尾都参加了项目。
Sam Tobin-Hochstadt (24) | Andreas Rossberg (13) | Rafael Weinstein (10) | Chris Pine (7) |
Alex Russell (21) | Oliver Hunt (12) | Jeff Dyer (8) | Mike Samuel (6) |
Luke Hoban (20) | Norbert Lindenberg (12) | David Fugate (8) | Ihab Awad (5) |
Cormac Flanagan (18) | Sam Ruby (12) | Domenic Denicola (7) | Reid Burke (5) |
Yehuda Katz (17) | Brian Terlson (12) | Rick Hudson (7) | Andreas Gal (5) |
Rick Waldron (17) | Sebastian Markbage (11) | Jafar Husain (7) | Peter Jensen (5) |
Eric Ferraiuolo (15) | Jeff Morrison (11) | Dimitry Lomov (7) | Pratap Lakshman(5) |
Tom Van Cutsem (14) | Rob Sayre (10) | Ben Newman (7) | Nicholas Malsakic (5) |
Nebojsa Ćirić (13) | Matt Sweeney (10) | Caridy Patino (7) |
图 48. 在制定 ES2015 期间,经常参加 TC39 会议的技术贡献者。这些数字反映了他们参加了多少次会议。
在 ES6 的开发过程中,人们对 TC39 的兴趣和参与度急剧增加,并在其完成后继续增加。2008 年 7 月,TC39 的第一次 Harmony 会议仅有代表 8 个组织的 13 人参加。2015 年 7 月的会议是在 ES2015 发布一个月后举行的,有代表 15 个组织的 34 名个人参会者(有些是远程参会)。在 2019 年 7 月的 TC39 会议上,有代表 24 个组织的 76 名参会者(46 人到场,30 人远程)。
准备 ES6 之后的未来。2013 年和 2014 年,随着 ES6 开发工作的结束,TC39 开始考虑未来版本的开发该如何进行。ES6 进程中的一个关注点在于,其中一些特性的设计是在它们「能出现在已发布的 ECMAScript 标准中」之前几年就完成了的。这与大多数主流浏览器厂商所采用的「常青浏览器」概念相冲突。常青浏览器每隔几周就会更新一次,使错误修复和新特性能尽快推出。大多数 TC39 成员认为,ECMAScript 标准需要更快的更新周期,以便更好地适应浏览器的快速发展。
为此,委员会提出了以一年为发布周期的提议。这将使各个新特性在标准中迅速变得可用。每年发布版本还可以使规范中的错误迅速得到纠正,并消除了多年来对长篇勘误表的需要。按照标准组织的规范,每年一次的发布周期是非常快的,但 Ecma 同意接受这个时间表。
以年为单位进行更新,将要求 TC39 在开发新语言特性方面更加规范。有些设计工作仍然需要多年才能完成,因此这需要一个流程,以适应跨越多个年度发布周期的特性开发项目,并能协调不同特性之间重叠的开发周期。还有人担心,ES6 过于依赖一位编辑来完成大部分规范的编写工作。要想成功实现每年发布,倡议者需要为自己的特性进行大部分的规范编写。
Rafael Weinstein 和 Dimitry Lomov 发表了一份提案 [TC39 2013c; Weinstein and Lomov 2013],建议在开发过程中,新特性提案要经过五个成熟阶段。后来 Weinstein 与 Allen Wirfs-Brook 合作,进一步定义和文档化了这一过程。附录 Q 是对新流程和发展阶段的描述。从 2014 年起,TC39 在 ES6 之后的所有工作中都遵循这一程序。截至 2020 年 6 月发表本文,TC39 在每年 6 月都成功发布了 ECMAScript 规范的新版本。
总结
JavaScript 是一门以低预期要求来创建的语言。它的初衷是作为 Java 在浏览器内的一个辅助工具,适合初级网页开发者和兼职程序员使用。然而在很短的时间内,它就(在浏览器里)超过了 Java,成为了交互式网页的主要语言。尽管 JavaScript 的前 20 年里充满了增强、改进、重新设计或取代它的失败尝试,但到这一时期结束时,JavaScript 已成为了世界上使用最广泛的编程语言——而且还不仅仅用于网页。除了使用 Node.js 和其他宿主构建的服务器应用外,JavaScript 还被用于构建桌面应用、移动设备应用、健身追踪器、机器人和众多嵌入式系统。它甚至是詹姆斯·韦伯太空望远镜的一部分。这个望远镜使用 Nombas 的 ES1 级嵌入式 JavaScript,作为其板载控制软件的一部分 [Dashevsky and Balzano 2008]。
JavaScript 的崛起是必然的吗?基于 Web 和浏览器博弈论中提出的可操作性要求,结论可能会倾向于演化出一种单一的主流网页编程语言,但并没有特别的理由说明这种语言必须是 JavaScript。其他语言也本可以填补这一角色。实际上纵观 JavaScript 的历史,有很多地方的结果都可能是不同的:
- 如果 Marc Andreessen 没有倡导开发浏览器脚本语言,会怎么样呢?
- 如果 Sun 公司的 Bill Joy 没有支持启动开发 Mocha 来作为 Java 的补充,会怎么样呢?
- 如果把开发 Mocha 的任务交给 Brendan Eich 以外的人,会怎么样呢?
- 如果 Eich 是一位更有经验的语言设计者或实现者,并总结认为 10 天内完成 demo 是一件不可能完成的任务,会怎么样呢?
- 如果 Eich 的编程能力不够,或者在语言设计上的野心太大,导致没能在 10 天内创建出 Mocha 的 demo,会怎么样呢?
- 如果 JavaScript 最初的设计中没有包含一等公民式的函数,会怎么样呢?
- 如果 Sun 或 Netscape 公司花大力气把 Java 与 HTML 更好地结合起来,而不是把 Java 作为一个孤立的环境来托管,会怎么样呢?
- 如果微软没有实现 JScript,而是更大力地推广它的 Visual Basic 替代方案,会怎么样呢?
- 如果微软在取得 90% 以上的浏览器市场份额后,继续投资浏览器语言技术,会怎么样呢?
- 如果 Macromedia/Adobe 推动将 ActionScript 2 或 3 作为浏览器的官方标准,而不是参与新版 ES4 的重新设计,会怎么样呢?
- 如果 TC39 内部没有出现反对新版 ES4 的声音,会怎么样呢?
如果,如果,如果……但这些事情其实都没有发生。实际上,面对嘲笑和有时甚至是激烈的批评,一个世代的浏览器实现者、引擎开发者、框架设计者、标准贡献者、工具构建者和 Web 应用程序员们,都找到了务实的方法来继续使用和增强 JavaScript,而且通常还不会破坏 Web。
Brendan Eich 在 2011 年一次名为「JSLOL」[Eich 2011e] 的会议演讲中,是这么描述 JavaScript 的:
最早他们说 JavaScript 没法做「富互联网应用」。
然后他们说 JavaScript 没法快起来。
然后他们说 JavaScript 没法修复语言问题。
然后他们说 JavaScript 没法做多核与 GPU 运算。
他们每次都错了!
我建议:永远押宝在 JS。
致谢
HOPL-IV 项目委员会成员们协助了两位作者(图 49)。他们提供了修改指导、LATEX 技巧和详尽的评审,并对本文草稿做出了有价值的反馈。
以下同事参与了 JavaScript 和 ECMAScript 的开发,他们为本文所讨论的事件与技术提供了信息:Douglas Crockford、Jeff Dyer、Richard Gabriel、Bill Gibbons、Gary Grossman、Lars T. Hansen、Dave Herman、Graydon Hoare、Yehuda Katz、Shon Katzenberger、Peter Kukol、Pratap Lakshman、Mark S. Miller、István Sebestyén、Mike Shaver、Brian Terlson、Tom Van Cutsem、Herman Venter、Rick Waldron 和 Robert Welland。
在稿件编写的各个阶段,对部分或全部稿件提供编辑反馈的 Beta 读者们包括:Jory Burson、Douglas Crockford、Jeff Dyer、Richard Gabriel、Lars T. Hansen、Dave Herman、Pratap Lakshman、Mathias Bynens、Axel Rauschmayer、Jonathan Sampson、Jon Steinhart、Tom Van Cutsem、Herman Venter、Rick Waldron、Rebecca Wirfs-Brook 和 Joseph Yoder。
Richard Gabriel、Rebecca Wirfs-Brock 和 Joseph Yoder 都参加了耗时多日的研讨会,在研讨会上,我们用全面的通读微调了论文的结构和语言。
记忆是不可靠的。因此准确的历史取决于能否获得原始文件。互联网档案馆和 Ecma 国际的内部档案,为本文提供了重要的原始资料。特别地,如果没有 Ecma 现任秘书长 István Sebestyén 的热情支持,本文是不可能完成的。Sebestyén 博士不仅确保了能让我们访问 Ecma 的内部档案,而且和我们一样都认为 Ecma 与 TC39 和 ECMAScript 有关的大部分文件档案,也都需要能通过网络公开访问。Ecma 的 Patrick Charollais 协助建立了 https://www.ecma-international.org/archive/ecmascript 网页。
最后,Allen Wirfs-Brock 要感谢 Pratap Lakshman 在 2007 年 1 月写的那封邮件。这是通向本文道路的起点。
图 49. Brendan Eich 和 Allen Wirfs-Brock,2011 年。照片由 Richard P. Gabriel 提供。