首次 TC39 会议
TC39 的组织会议于 1996 年 11 月 21 日至 22 日在加州山景城的 Netscape 办公室举行,根据记载 [TC39 1996] 共有 30 位与会者(图 11)。会议开始前,Netscape 核心技术副总裁 David Stryker 和代表 Ecma 的 Jan van den Beld 分别致了欢迎辞。Stryker 表达了对委员会所创建规范的愿景,希望规范与当前实现只有最小程度的偏差,并能将超出规范范畴的语言扩展留待未来考量。
执行主席 | Mr. J. van den Beld |
秘书 | Mr. J. van den Beld (SG ECMA) |
参会者 | Mr. Cargill (Netscape), Ms. Converse (Netscape), Mr. Eich (Netscape), Mr. Fisher (NIST), Mr. Gardner (Borland), Mr. Krull (Borland), Mr. Ksar (HP), Mr. Lenkov (HP), Mr. Lie (W3C), Mr. Luu (Mainsoft), Mr. Mathis (Pithecanthropus, JTC1/SC22), Mr. Matzke (Apple), Mr. Murarka (Spyglass), Ms. Nguyen (Netscape), Mr. Noorda (Nombas), Mr. Palay (Silicon Graphics), Mr. Reardon (Microsoft), Mr. Robinson (Sun), Mr. Singer (IBM), Mr. Smilonich (Unysis), Mr. Smith (Digital), Mr. Stryker (Netscape), Ms. Thompson (Unisys), Mr. Urquhart (Sun), Mr. Veale (Borland), Mr. Welland (Microsoft), Mr. White (AAC Group, Microsoft), Mr. Willingmyre (GTW Associates, Microsoft), Mr. Wiltamuth (Microsoft). |
缺席 | Mr. Huffadine (Callscan) |
图 11. 首次 TC39 会议的参会者 [TC39 1996]。
微软 Internet Explorer 开发团队的负责人 Thomas Reardon 则建议委员会不要将 HTML 对象模型的内置库纳入规范中,从而「避免重复」。这些内容应留给 W3C。这一建议被委员会接受,并对委员会的早期成功至关重要。因为尽管 Netscape 和微软的核心语言特性非常相似,它们的 HTML API 却大不相同。这条 TC39 只开发独立于平台 / 宿主环境标准的决定,一直以来都是 TC39 的核心行动准则之一。Reardon 讨论了微软在尝试使 JScript 与 Netscape 完全兼容时遇到的困难,并强调了制定形式化语言规范的必要性。但他也告诫说,对于能增加价值的竞争性实现,规范同样应当为其留有余地。
会议拟议的内容包括 Netscape、Sun、微软和 Nombas 公司的技术演讲,以及在成立新的 Ecma 技术委员会并开始起草标准语言规范时,实际所需的各类组织活动。但在会议上 Sun 表示它不需要做演讲,因此 Borland International 公司的演讲被添加到了议程中。
在会议的开始阶段,Netscape 和 Borland 都分发了技术规范草案,但微软则没有。在 Thomas Reardon 的发言中,他说微软已制定了自己的初步规范并保存了文件。Reardon 表示他们暂时还没有时间完成拷贝,但明天就会有可用的副本。因此微软的技术演讲移到了会议的第二天。
Brendan Eich 参加了会议,但 Netscape 的技术演讲是由 Anh Nguyen 进行的,介绍了 Eich 和 C. Rand McKinny 为 JavaScript 1.1 编写的《JavaScript 语言规范》的初稿 [1996]。Netscape 向 Ecma 贡献了该文档,作为标准化工作的基础文档之一。Nguyen 解释说,Netscape Navigator 3 中的 JavaScript 1.1 与 Netscape 2 中的初始 JavaScript 版本有一些差异。Netscape 的规范使用类似于 ANSI C 语言标准 [ANSI X3 1989] 的 BNF 表示法来描述语言语法。它使用非正式的叙述(prose)来定义大多数语义,并使用表格来描述语言的隐式类型转换(coercion)规则。
Borland 研发了JavaScript 和 JavaScript IDE 的服务端实现 [Lazar 1997],其演讲专注于他们的实现中已经完成或纳入规划的几种语言扩展 [Borland International 1996]。主要的扩展包括类定义、try / catch / finally 异常处理、类 C 的 switch 语句、作为一等值的代码块、数组字面量、类 C 的预处理器,以及许多内置库的新增特性(包括一些 IO 特性在内)。Borland 还指出了他们在尝试与 Netscape 的实现互相兼容时遇到的困难,并表示需要更正式的规范,以确保实现之间的互操作性。
Nombas 的 Brent Noorda 介绍了该公司定位于脚本语言的 Cmm(C minus minus)产品。Cmm 的表层语法和某些语义与 JavaScript 1.0 非常相似,后来,Nombas 将其 Cmm 实现发展成了面向嵌入式应用的 ECMAScript 实现 [Noorda 2012]。
从第一天会议休会起,微软的 Robert Welland 就开始了工作 [Welland et al. 2018, at +8:30]。Thomas Reardon 关于「没有时间做拷贝」的托词其实是种拖延策略,为的是让 Welland 有更多时间来处理微软的规范。为会议创建规范文档的任务之前已分配给了微软的技术作家,但当 Welland 在出差参会之际收到文档时,他发现这份文档甚至不足以作为初步的语言规范,并不想把这样的文档交给委员会。然而当他在会议开始前看到 Netscape 的文档时,他感觉 Netscape 的文档同样写得不充分,不希望它成为制定标准的唯一基础文档。于是 Welland 和 Reardon 决定拖延一天,从而在会议第二天开始时准备出更好的文档。
会议结束后,Robert Welland 回到了他以前做 NewtonScript 时的同事 Walter Smith 的家中。Walter Smith 也供职于微软,但还住在湾区。他们通宵工作,将微软的文档改成了一份过得去的 JavaScript 核心语言初步规范。他们的规范还借鉴了 ANSI C 标准的大部分语法,并用一张表来表达类型转换规则。但是,Welland 希望其余部分的语义也能被更形式化地确定。他想到了 [Welland et al. 2018, at +10:10]《LISP 1.5 程序员手册》[McCarthy and Levin 1965] 中描述 Lisp 解释器语义的一种风格。在这种风格下,每种句法形式都紧跟着对「如何为该语法求值」的精确描述。某些情况下,语义还会使用伪代码来表示33。Welland 决定使用带有编号步骤的类似伪代码,来描述对 JavaScript 语义的求值。
Welland 和 Smith 根据当时的 JScript 实现,在文档中添加了语义。对于不确定的地方,他们会回退参考自己先前在 Self 和 NewtonScript 上的经验,找到从那个角度出发有价值的表述。这份文档包含了一张用于表示数组的对象图,它在对属性继承进行建模时,看起来非常像 Self。到第二天早上,他们觉得做出的文档对于当作起点来说已经足够好了。于是他们制作了副本,由 Welland 在第二天会议开始时进行了分发。这份文档就是《JScript 语言规范 0.1 版》[Welland et al. 1996],成为了微软贡献到 Ecma 的基础文档。
当 Robert Welland 进行演讲时,他惊喜地发现与会人员普遍更喜欢他的文档,并同意需要更正式的规范来确保实现的可互通性。但这里的共识并非等待另一种尚未确定的正式规范,而是通过整合 Netscape、微软和 Borland 贡献的规范来创建标准的初始草案,然后努力使最终的草案更完整而精确。委员会首先创建了一份问题列表 [Appendix G],其中的问题需要在第一版标准中得以解决或澄清。鉴于共提交了两份被提议作为基准的文档,所以必须选择其中一份来开始编辑。Netscape 的文档是使用 FrameMaker 编写的,而微软的文档则使用 Word 编写。Ecma 的代表解释说,他们的内部编辑流程使用 Word。于是令 Welland 惊讶的是,委员会同意将微软的贡献作为基准文档。
委员会选举出了最初的主席团成员(图 12),并设定了非常激进的目标:在 1997 年 1 月的下一次会议上准备出初稿,在 1997 年 4 月准备出最终稿,进而在 1997 年 6 月的 Ecma GA 大会上批准该标准。他们安排了后续约每六周一次的会议,并着手建立私人邮件列表和 FTP 服务器34。
主席 | Mr. G. Robinson (Sun) |
副主席 | Mr. C. Cargill (Netscape) |
副主席 | Mr. S. Wiltamuth (Microsoft) |
主编 | Mr. M. Gardner (Borland) - 待确认 |
助理编辑 | Mr. A. Murarka (Spyglass) - 待确认 |
图 12. 首次 TC39 会议选举出的主席团成员 [TC39 1996]。
TC39 的第二次会议 [1997e] 于 1997 年 1 月 14 日至 15 日举行,共有 22 位与会者,其中包括 5 位并不属于 Ecma 会员的访客。Jan van den Beld 宣布 TC39 的建立已得到 Ecma GA 大会的确认。他强调说,TC39 必须尽快开始遵守有关会员资格和参与条件的 Ecma 规则,开发 Ecma 标准的贡献者必须是某个 Ecma 会员组织的代表。
会议的主要技术内容,是对标准第一稿进行审查和讨论 [TC39 1997c]。Borland 的 Michael Gardner 和 Randy Solton 通过整合 Netscape、微软和 Borland 的贡献,创建出了这份文档。由于 Spyglass 公司没有加入 Ecma,因此 Anup Murarka 没有参加第一稿的开发。会议将所有三个实现中完全相同的特性认定为不存在争议,并确定了特性不同之处以便后续协调。
那些特定于具体实现的特性,在「扩展提案」(Proposed Extensions)附录中列出。委员会讨论了对扩展的处理方式,并商定对于当时实现中共有的核心特性,其优先级将高于所有扩展。另外委员会还达成一致,认为规范应规避需要修改现有应用的改动,这也最终成为了未来对标准的修订中重要的设计准则。
为满足紧迫的时间表,委员会成立了一个特设技术工作组。这个工作组获得了与编辑一起工作的授权,以便填补丢失的材料,并解决规范中突出的技术问题。小组将进行电子化交流,每周轮流以当面会议和电话会议的形式开会,并由 Scott Wiltamuth 担任书记员。TC39 会议于 1 月 15 日上午 10:30 休会,其余时间用于特设技术工作组的会议。
会议结束后,Borland 决定不加入 Ecma,因此 Michael Gardner 无法继续担任编辑。Sun 请来了 Guy Steele,他从 1997 年 1 月下旬开始担任编辑,一直到 1997 年 9 月发布第一版标准为止。