布兰登·艾奇(Brendan Eich)


 

布兰登·艾奇(Brendan Eich,1964年-),JavaScript的发明人,目前(2007年)在Mozilla公司担任首席技术官(Chief Technology Officer)。

布兰登·艾奇1964年生于美国加州的森尼维尔市,毕业于伊利诺伊大学香槟分校。1995年任职于网景期间,为网景浏览器开发出JavaScript,之后成为浏览器上应用最广泛的脚本语言之一。1998年布兰登协助成立mozilla.org,2003年在美国线上决定结束网景浏览器的开发后,布兰登协助成立了Mozilla 基金会。

个人网站:http://web.archive.org/web/20000815055653/people.netscape.com/brendan/



Brendan Eich于1995年在Netscape发明了JavaScript语言,这个语言在过去的一些年里曾是一个最被误解的语言,随着AJAX和Web 2.0的发展,人们逐渐正视JavaScript。这是一篇Computerworld对Brendan Eich的一次采访,对JavaScript的过去、现在和未来都做了阐述。

是什么促使你去开发JavaScript?

对于JavaScript的早期历史,我在自己的博客中写过:http://Weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html
(图)Brendan EichBrendan Eich

我在1995年4月4日加入了Netscape,当时的目标是把Scheme语言或者类似的语言嵌入到 Netscape的浏览器当中。由于申请没 有通过,我加入了Netscape的Server团队,这个团队负责Web服务器和代理服务器方面产品的开发,我在这里工作了一个月,主要进行下一代 HTTP的研发。到了五月份的时候,我就被调回当初想加入Client团队,从此我就开始了对JavaScript雏形的开发。

Marc Andreessen和我,连同在Sun工作的Bill Joy,坚信HTML需要一种脚本化的语言,这种语言就算对于新手和业余者来说也会很容易上手,而且这种语言的代码可以直接写在HTML的标记之间,以源 代码的形式作为网页的一部分发布。这种信念同时成为了我们的动力。我们打算开发一个”胶水语言“,面向网站的设计者和兼职做网站开发的程序员,以替代以前 那种通过图片、插件和Java小程序搭建网站的方式。我们把Java看成是由高薪程序员使用的组件语言,而胶水程序员,也就是那些网页设计师,将通过 JavaScript把组件组合起来实现交互。

从这个意义上说,纵观在微软的操作系统和应用程序中使用的编程语言家族中,JavaScript应该和Visual Basic是类似的,而Java和C++类似。贯穿在编程语言金字塔的分工差别促进了更多的创新,使我们除了可以选择像Java和C++那样”真正“的编 程语言以外,还可以选择一些”小巧“的脚本式语言,比如JavaScript。

遇到过什么特别的需要解决的问题么?

不可编程的网页是静态的,堆砌着文字,充其量把图片放到表格里或者干脆浮动在网页的两侧。通过JavaScript这样的脚本语言,我们可以控制网页上的元素,更改他们的属性并响应事件。可以设想这样一个更具有活力的网络,只通过一些网页就可以实现以前应用程序才能实现的效果。

实际上,一些早期的开发者从1995年下半年就开始通过JavaScript和framesets中的框架来构建Web应用程序,这应该是最早的 ”Ajax“或者”Web 2.0“风格的Web应用程序,但是采用这种方式开发会导致机器速度变慢。JavaScript在最初的时候就有一个操作浏览器的函数库,但这个库的功能 很有限。和服务器之间的通讯方法也仅限于重新加载整个网页。

JavaScript和Java在本质上是不相干的,但为什么要给他取这个名字呢?

通过上面的链接,在我的博客中可以找到答案。

JavaScript最初的名字Mocha和LiveScript 是根据什么起的?

Mocha是Marc Andreessen起的项目名称,但Netscape的市场部发现这个名字存在潜在的商标冲突,所以对外决定启用新的名称,他们为Netscape的产 品名称启用了Live这个前缀,比如LiveWire、LiveScript等。但在1995-1996这个时间,Java的发展势头太猛了,所以大家决 定沾沾光,把名字修改为JavaScript。

JavaScript和ECMAScript有什么不同?

ECMA- 262第三版是ECMAScript标准的最新版本。第一版的制定建立在我在Netscape时的工作成果,同时吸收了JScript(微软在IE平台上对JavaScript进行反向工程的成果)的内容,还包括Borl和少数其他公司的成果。

ECMA-262第三版明确允许对之进行各种扩展,JavaScript所能作的就比标准多得多,这门语言的演化已经赶在了当前执行标准的前面。 比如Mozilla的SpiderMonkey(SpiderMonkey也是Firefox中的JavaScript引擎)和Rhino引擎。

Ecma 标准只是描述了核心的语言,不包括DOM,大家还是会把DOM当成JavaScript的一部分看待。

你认为JavaScript和JScript是两个可以或者应该互相被替换的术语么?

在跨浏览器的文档和书籍中,当提到这门语言,没有人会使用JScript。JavaScript才是这些书籍、文档、参考手册等中使用的名字,无论你认为这个名字好还是坏,JavaScript就是这个语言的真实名字。

在JavaScript的开发过程中,遇到过什么必须面对而且特别困难或者讨厌的问题么?

在语言的设计阶段冻结以后,每一个小的开发周期主要就是在检验设计时的想法。我在1995年的5月,用了大概10天的时间开发解释器,包括除了 Date对象以外的其它内置对象。在这期间,Netscape的Ken Smith用C语言重写了Java的java.util.Date类,这个类的千年虫Bug也在无意间被带进了JavaScript。

1995 年剩下的日子,我的工作就是把这个引擎嵌入到Netscape浏览器中,并建立那个后来十分著名的DOM(文档对象模型),准确的说应该 是第0级DOM,这时候已经可以在JavaScript中通过一系列函数接口控制窗口、文档、链接、图片等对象了,并可以响应事件和通过定时器运行代码。

在1996年中期以前,在Netscape只有我一个人在做JavaScript的开发。

在你所见过的用 JavaScript编写的程序中,你认为哪个是最有趣的?

TIBET是早期很有野心的一个模仿Smalltalk的框架。

现在有很多用JavaScript写的程序非常叹为观止。比如HotRuby,在这里可以看到更多的内容,这个程序完全可以让用户在浏览器中通过 JavaScript运行Ruby的代码。有人还用JavaScript实现了一个Java虚拟机,叫做Orto,在这里可以看到更多的信息,需要注意的是,我不确定Orto究竟实现了Java虚拟机多少的功能,但确实人人都说这是一个非常出色的程序。

还有很多用JavaScript编写的游戏,这其中有新开发的,也有从其他平台移植过来的,比如以下两个:

http://blog.nihilogic.dk/2008/04/super-mario-in-14kb-javascript.html
http://canvex.lazyilluminati.com/83/play.xhtml

John Resig移植的Processing Visualization Language是我认为最棒的。

你见过最差的是哪一个?

我可能选不出一个最差的JavaScript程序。但老实说在过去,JavaScript主要被用来做弹出窗口,在状态栏滚动文字等这些令人讨厌 的事情。一个像Firefox这样的好浏览器,提供带有默认值的用户控件来实现功能,Netscape在最开始也应该这样做,这样JavaScript就 不会被滥用了。

你知道有什么JavaScript的应用是在你最初计划之外的么?如果有,是什么?这个应用现在运作得怎么样?

上面提到Orto这个Java虚拟机就在我当初的意料之外。我不想让JavaScript通过GWT、HaXe或者类似的代码生成器,成为一个“目标(target)”语言,这是另外一种解释语言,在这里JavaScript只是一个对象,或者经过编译可以执行的语言。

这些代码生成器把JavaScript当成一个安全的中间语言来使用,介于运行于服务器端的高级语言和经过优化的运行于浏览器中的C或者C++代 码。这将过分在JavaScript引擎的代码中强调性能,潜在上会把更多的大部分开发者不会使用的特性填充到Ecma标准中去。

用这些工具生成的JavaScript代码运行时看起来很“有效”,但从某种意义上说,JavaScripty已经有足够好并且会越来越好的性 能,每个人都想把JavaScript的性能最大化。但是大部分的JavaScript都是手写的,我也希望这种情况会一直延续下去。

似乎有很多跨站脚本攻击都是通过JavaScript开发的,对于这方面你有什么看法?现在有什么计划来解决这个问题么?

是的,在这方面我们现在有具体的计划。一方面通过W3C这样的组织制定标准,另一方面通过Web开发者必须遵守的内容约束。更多的内容可以参考下面这个文档:

http://www.gerv.net/security/content-restrictions/

Mozilla的缺陷跟踪系统可以确保这些限制的实施:

https://bugzilla.mozilla.org/show_bug.cgi?id=390910

你预计JavaScript的下个版本会在什么时候发布?你认为哪些改进会被整合到新版本中?

ECMA-262标准的3.1版预计会在2009年年中的时候出炉,我希望一个协调的第四版会在接下来的一年中诞生。我相信无论对于我自己,还是 对于委员会中的每位委员,经过多种多样可操作的雏形实现验证的新版本规范,比定下某个特定日期,在这个日期前必须发布一个法律上认可的但却贸然上线的规范 更加重要。但根据现在的努力,3.1版在短期内就可以实现,而一个协调的第四大版有望在一到两年内成为与3.1兼容的继任者。

3.1版本的规范,主要致力于修复现有的缺陷,整合一些已经被SpiderMonkey(比如getters和setters)和其他浏览器中的引擎开发出来的功能,以及为对象和属性提供更加完善的功能。(现在的对象不能被继承,属性也不能被重写等问题)。

紧随3.1版本的这个主要版本,所有的改进都会基于3.1版本的基础上,致力于易用性(包括新语法)、模块化以及更多更完善的功能。总的来说,这个版本就会成为终结使用全局函数进行 JavaScript编程的现状的一个解决方案。

你认为JavayScript在Web 2.0中扮演什么样的角色?

很明显,JavaScript对于“Ajax”或者“Web 2.0”这场革命来说,是必不可少的组成部分。我还要说,Firefox、Safari和其他新浏览器之间的竞争,以及由于这些竞争所催生的新标准,同样很重要。

真正的程序都可以运行在浏览器中,而且这些程序都是用JavaScript写的。

这就使JavaScript不得不变得十分强大,作为可以运行在现存所有浏览器中的前提。这些浏览器甚至包括微软在新千年的头五年勉强维护的IE 5.5和IE 6.0。因此可以用支柱(tap root)来形容JavaScript。

你怎样看待这些年来反对JavaScript的“共鸣”声音?

对我来说这些“共鸣”主要有几个方面:

* 早期的异议主要是反对把脚本语言直接嵌入到HTML中的。

* 对JavaScript开启的一些讨厌的功能的排斥(在Firefox出现以前,缺乏完善的控件支持,比如弹出式窗口等)。

* 不同浏览器对DOM的兼容性不同,这让开发者感到很头痛。让JavaScript可以更好的兼容所有的浏览器,同样很头痛。

* 当然,有人对Netscape市场部在JavaScript命名时的花招一直耿耿于怀,因为这暗示着JavaScript和Java存在联系,不然的话就 是故意传播JavaScript和Java之间的混乱(必须郑重声明,Netscape的所有人都不想故意传播这种混乱)。

这些反对的共鸣都是可以理解的。无论是在网络上、在多用户操作系统中还是在各种兼容的浏览器中,JavaScript都是提供互动性的唯一的编程 语言(比其他所有平台都大)。其它的编程语言都是通过插件的形式,而且都是同一家公司开发的,这样就可以通过代码的方式来控制操作性。因此,使用 JavaScript和DOM进行开发,曾经是一个很困难的经历。

这无助于Netscape和Microsoft的浏览器战争,猛烈的创新革命促使标准化的过早到来,而且这场战争的结束导致了多年来对JavaScript的忽视,和在IE的垄断下制定各种Web标准。

另一方面,很多开发者都声称自己喜欢做JavaScript的开发,而且自从2004年以后,伴随着“Ajax”和“Web 2.0”的出现,JavaScript正迎来自己的新生。

你怎样看待JavaScript对未来的影响?你认为在网络上是否会出现新的客户端脚本语言?

我认为JavaScript暂时还是默认的,也是唯一需要的浏览器编程语言。但是其它语言也会在浏览器中被支持,开始的时候可能只在某个浏览器中 被支持,最终会演变为跨浏览器的标准形式。Mozilla的浏览器,包括 Firefox,现在已经有选择的整合了C-Python,但是有很多工作还是要由你自己来做,你还要确保你的用户已经安装了C-Python运行库。我 们现在正致力于通过安全地、可兼容地以及可以自动更新的运行库来支持更多流行的语言。

现在已经很清楚,Web的客户端是很值得进行编程的,这与1995年Marc Andreessen和我预料的一样。现在世界上的台式电脑和笔记本有足够强大的运算能力和存储空间,和以往任何时间相比,都可以做更多有用的任务,不限 制他们的自动化能力,把表单或者消息提交给Web服务器上真正的程序。真正的程序同样可以运行在浏览器中,而且他们是用JavaScript写的。

JavaScript 的影响在不断增长,它不仅已经成为浏览器中脚本的标准,还会成为台式机和其他设备(比如iPhone)中脚本的标准。

你怎样看待最近发布的JavaScript框架,比如SproutCode和Objective- J/Cappuccino?你认为他们会给未来的Web应用程序带来什么影响?

Apple的炒作机器无疑使一些人把这个产品当成了 Ajax的第二代。对我来说,他们只是进化在不同阶段的JavaScript库和框架而已。包 括 Google GWT和一些比较流行的库,比如Dojo、JQuery、YUI以及Prototype。我不大想看到某个框架或者库过于强大,至少不希望会持续很多年, 最好他们只是在Web的某个领域很流行。在某些特定的设备上开发,你当然没有什么选择的余地,但在Web上就不一样,因为它涵盖的范围非常广,这是无论多 么流行的设备都无法比拟的。

你认为我们有可能会看到桌面应用程序最终走向灭亡么?

我认为不会,但你会看到更多使用 Web技术构建的桌面应用程序,他们甚至是安装在本地的,而不是储存在某个Web服务器主机中。当然Web应用程 序也会持续不断的发展。伴随着JavaScript的成长和其他基于浏览器的Web标准的诞生,我们将能看到Web应用程序可以做更多的互动行的工作,而 这些工作以前都是必须使用桌面应用程序来完成的。我们已经在前沿的浏览器中看到离线应用、二维和三维渲染等已经变为事实。

你怎样看待像 Flash这样不断流行的插件对JavaScript的流行度带来的影响?

Flash在尽力做到完善的支持Ajax,可以编写脚本,可以在外部访问,和其他插件、像图片和表格这样的内置对象、纯粹的JavaScript 对象一样,以组件的方式嵌入到网页中。开放的网络对待每项技术都是一视同仁的,这也确实妨碍了单一厂商的一枝独秀。你可以通过Flash怎样在Web 2.0的世界中畅游,和微软的Silverlight也瞄准了现代Web世界这个大蛋糕看出一些端倪。

人们不想回到一家厂商的插件充斥着整个网页的时代,所有的网站也会这么想。

首先,展示在最前沿浏览器中的Web标准正在不断进化,并努力与Flash和Silverlight在视频、动画、高性能JavaScript等方面分庭抗争。

其次,没有网站愿意为了“bling”而牺牲“reach”。和插件始终存在不足相比,浏览器天生就会支持各种Web标准,比如JavaScript。用户不会经常更新他们的插件,用户也会拒绝使用某个插件,但会信任并继续使用浏览器。

你认为JavaScript将来会在哪些地方延伸?

首先自然会在浏览器中,但以后可能会更广,比如在服务器端,或者成为一个端到端的编程语言(更多的替代传统意义上桌面或操作系统的脚本职责)。

你是否依旧认为(就像你之前说过的)“ECMAScript和皮肤病一样,只是一个多余的商业名称而已”?

我没有印象说过这句话,但是有一点很确认:这不是一个理想的名字,而且听起来有点像湿疹(eczema)。

你是否依然预计ECMA-262会在2008年10月前发布?你是否期望新版本将会完全向后不兼容?

如果你说的是ECMA-262的第四版,那我的答案肯定是不,我们不指望这个版本会在2008年发布。负责下一个版本的技术委员会(ECMA TC39)正在努力协调各种提议,协调的结果将包含一个短期的3.1版本,这将在2009年春天发布,还包括一个接下来发布的更大的版本(其实也不是特别 大),我们称之为ECMA-262第四版。

JavaScript的不断发展和流行给你带来过什么惊喜么?

JavaScript 的流行给了我不小的惊喜。我在很长一段时间里,心里已经默认JavaScript是不会流行的了。原因当然包括那些讨厌的弹 出窗口,但更多是由于这种自由组合的函数和基于原型的对象编程的传统。但后来结果发现,很多程序员本来就是从JavaScript开始学习编程的,还有一 些擅长面向对象编程的程序员,很喜欢这种非传统的组合。

JavaScript从最初的开发到现在,什么是让你最骄傲的?

应该是把优秀的函数和对象原型结合到了一起。对于一个已经标准化的产品,我不会说他有多么完美,因为标准化的过程中扩充了不少的内容,其中包含一些错误。但抛出一些小失误和人为原因,核心的思想完全经住了时间的考验。

你认为编程语言会朝什么方向发展?尤其是在接下来的5-20年间?

未来的编程语言必须在我们都要面对的两个方面做得更好:

* 多核/大规模并行计算机现在已经出现在大家的身边,现在只是出现在台式机上,不久移动设备也会具有相应的能力。计算机科学家们在最近的十五年里,正在努力 使并行计算可以做更多有用的事情,也更加容易使用。JavaScript在多核的世界里面有自己的角色需要扮演,从相对简单的扩展开始,比如Google Gear的工作池,“零共享(shared nothing)”的后台线程,通过浏览器中的JavaScript互相发送和接收消息进行通讯。

* 安全。一个编程语言无法用自身建立起来的安全体系保证安全,因为安全是一套系统属性,涵盖所有层次的抽象,包括上游和下游的语言。但一个编程语言当然可以向用户提供各种更好或者更差的工具来构建安全系统,并证明这些安全属性可以在这个编程语言中得到保证。

你对那些未来的程序员有什么建议么?

学习大师们的经典著作:Knuth、Wirth和Hoare。计算机科学就像一个滚动的轮胎,在学术研究方面,每10-20年就会重复发现一些以 前曾经被发现过的东西。当然,近些年来大家也做了大量的工作,但我要说的,学生们不止要从最近的知识中学习,还要向过去的那些大师们学习。

你还有什么要补充的么?

目前没有了,而且我要回去工作了。

在许多资料,JavaScript的语源被追溯到一种名为Cmm的语言。同样是在这一溯源的过程中,人们发现“其实”JavaScript不是第一种网页中的脚本语言。目前一些所谓“公认”的情况是这样的:

大概在1992年,一家称作Nombas的公司开始研发一种叫做C减减(C-minus-minus,简称Cmm)的嵌入式脚本语言。这个脚本语言捆绑在一个叫做CEnvi的共享软件产品中,当 Netscape Navigator崭露头角时,Nombas研发了一个能嵌入网页中的CEnvi的版本。这些早期的试验称为EspressoPage(浓咖啡般的页面),他们代表了第一个在万维网上使用的客户端脚本语言。而Nombas丝毫没有料到他的理念将会成为因特网的一块重要基石。


然而,这是真实的情况吗?运行在Netscape中的第一个“客户端脚本语言”真的是Cmm的浓咖啡?又或真的象Wiki中记述的那样,Brendan Eich在JavaScript引用了Cmm语言特性?不是的。尽管上述的资料看起来出权威:《Javascript高级程式设计》(Professional JavaScript for Web Developers),但他的确错了。

JavaScript和 Cmm在语言特性上无关
============
为了弄明白JavaScript和Cmm的关系,我大概用了三天的时间,从网上收集了多个Cmm的版本。这些版本既包括早期的Cmm(1993年),也包括在JavaScript初创时的Cmm(1995年),还包括在后来,Cmm更名为 ScriptEase的第一个版本(3.0, 1997年),作为参考,我还考察了他在服务器端的版本。

遗憾的是,在1996年之前,在 Cmm的2.x的最后一个版本之前,Cmm都并不是个面向对象(或基于对象)的语言,Cmm正如他自己的名字所说的相同:是个精减版的C,而不是C++或以C++为基础的变种。所以Cmm中有“结构”,也有#include等,整个的体系是参考C语言的。

由于JavaScript在基本的语法特性(例如大括号、语句关键字等)上参考了C,在对象系统上(例如“.”作为成员存取)上参考了Java,因此在一定程度上Cmm和 JavaScript存在相似性??主要是和一起借鉴自C的部分。不过除了这些之外,JavaScript和Cmm在语言特性上完全无关。


JavaScript 最初的基本设计是怎样的?
============
我需要补充一下JavaScript初始设计目标。Brendan Eich在1995年4月前后被Netscape公司雇佣,目标是完成一套语言系统。最初的设计里,该语言系统是为Netscape的LiveWire战略服务的。该战略彰显了Netscape当年的勃勃野心,他是Netscape公司的一个通用的Web研发环境,包括Netscape Enterprise、FastTrack Server等。LiveWire架构也成为所有Web服务器提供SP(Server Page)技术的蓝本。例如在IIS中的ASP,及更早期的IDC(Internet Database Connect)。

这种技术在服务器端通过内嵌于网页的LiveScript代码,使用名为database、DbPool、Cursor等的一组对象来存取LiveWire Database。作为整套的解决方案,Netscape在客户端网页上也提供LiveScript脚本语言的支持,除了访问Array、String等这些内置对象之外,也能访问window等浏览器对象。

不过并不清晰的是:LiveScript最初的设计是先考虑服务器端应用,还是先考虑网页中应用。但这些应用环境的决策上的变化,时间仅仅限制在1995年4月至1995年10月之前,因为当月发布的netscape 2.0 beta1已包含了脚本支持。

在netscape 2.0 beta1中并不支持标签,而只是在form表单元素中支持了onclick这类的事件。这时的脚本代码是用在HTML标签属性上的,也就是类似于:
非常快,三周之后netscape 就发布了beta2。这个版本正式地支持了标签,并能解析该标签中的代码、标识符,开始具有调用函数、表达式运算等能力。这个版本已具有了JavaScript 1.0的基本性质。

??什么?能调用函数、表达式运算就是JavaScript 1.0的基本性质了?

是的,差不多了。相比起来,JavaScript 1.0只是在这样的基础上加上了一套对象系统而已。在随后发布的beta 3中,函数能作为构造器使用,能创建出用户自己的对象来了。再后来window等全局对象被加了进来,再把“当前网页”中的表单元素等影射成可编程对象,JavaScript 1.0就完成了。

仅仅如此而已。在JavaScript 1.0的时代,既没有“原型继承”,也没有“函数式编程”??甚至连匿名函数也没有支持,所以下面的代码就足够让浏览器挂掉了:

var func = function()


JavaScript 1.0的设计目标,就是“让网页动起来”,最初的需求包括三个方面:
- 让网页中的元素能被编程,所以象forms、links这些对象,在网页装载结束后就初始化为全局成员了??那时候还没有所谓的DOM或DHTML呢。
- 让JavaScript跟Java接近一些,因为Netscape和Sun有战略合作。而且,Sun那时相当火暴。
- 让JavaScript能在服务器和客户端两边都使用,因此他必须是嵌入式的。

不过JavaScript的另一项特性,则自他的第一个版本就存在。该特性就是动态执行,也就是eval()。这是和他的“脚本”的性质有关的。在早期的“脚本”也被称为“批处理程式”,就如同DOS批处理或 Unix shell相同,脚本应当具有装入字符串文本并“动态执行”的能力。

所以总结起来,JavaScript 1.0其实是个能创建和操作对象的普通过程式语言。这个时候的JS代码既不能检测“对象-构造器”之间的继承性,也没有原型继承这样的东东来构建对象系统。函数除了在new MyObject()时协助传入一个this引用之外,就跟普通的函数完全相同。而且,最为有趣的是,Brendan Eich这时还没有形成JavaScript中最重要的“类型系统”概念,此时undefined还只是系统全局中的一个特别的值,而不是某种类型。 typeof关键字也还根本不存在。换言之,Eich现在要做的只是个“可编程的、能用对象的”脚本语言,至于他是否在类型系统上完备或优美,他还顾不过来呢。

JavaScript最重要的“构造器-原型继承”概念是在JavaScript 1.1版本中提出的,类型系统和重要的函数式语言特性要等到v1.2之后才被加入。而目前,在1996年1月底,JavaScript 1.0随Netscape
2.0正式版发布了。


JavaScript的名字
============
为了弄清晰JavaScript名称和语言特性的演变,我下载了netscape 2.0 beta1~6,及2.0~2.02所有版本的发布文件,并逐一安装测试。下面解释JavaScript名字的演变过程。

JavaScript 最早是被称为Mocha(魔卡)的,这是这个项目的代码名。这个名字一直用到Netscape2.0 beta 2发布之前(95.11.04)??包括在beta 1中弹出的错误框上,还能看到Mocha的名字。
不过,早在此前的9月18 号,netscape就已发布消息将在LiveWire中启用一种服务器端脚本(未提及名称)。又因为我们前面提到的“前后端通用脚本”的设计,该语言在 beta 2发布时就使用了内部名称LiveScript。

但同样混乱的事情是,事实上这时Netscape已决定将该语言命名为 “JavaScript”。因此在beta 2的发布备忘中该语言称为JavaScript,而界面上却从Mocha改为了LiveScript。这一局面一直持续到12月4日,netscape和 sun一起发布声明,正式启用了JavaScript这个名字。随后beta 4发布(95.12.20),界面和文件上就统一了。

所以事实上“LiveScript”这个名字能考证的生命周期,也就只有一个月的时间(在95.11.04- 12.04)。但Mocha毕竟只是项目代码名,而非产品名,所以后来人们追溯JavaScript的历史,大多只提到LiveScript为止。

第一段网页内脚本真的是浓咖啡(Espresso Page)吗?
============
如上面所述的,Netscape 2.0的beta 1中就正式加入了脚本支持,最迟在beta 2之前。对象的构建方式、标签的使用,及在HTML标签上使用onclick这类事件句柄……这些设计就已被明确了。这些是一直延续到目前的,我们最主要的使用网页的方式。

那么,这个时间点能不容置疑的被确定在95.11.04之前(beta 2发布之前)。

我们目前再回过头来看那份讲述Espresso Page的消息。这其实是由Brent Noorda先生(Nombas公司总裁)于1995.11.27日发布在新闻组上 (comp.infosystems.www.authoring.html)上的一则消息,原文是“这周末我们将放出一些Espresso Pages在我们的网站上(This weekend we put up the Espresso Pages, at...)”,那么,也就是Espresso Pages其实出目前11.30号之后。这已远远晚于上面的时间了。

也就是说,真正第一种在Netscape中使用的客户端脚本,仍然是由Brendan Eich编写的JavaScript。这种脚本使用“”标签(在服务器端使用标签),支持五种基本类型(除undefined之外),支持自定义对象和构造器等基本特性,能够操作网页中内嵌的links、forms等对象。

然而需要继承说明的是,由于Nombas早早地就实现了Cmm语言及其研发环境,所以他不必花什么力气就能将他们移植到网页中去并展示其非常丰富的能力。所以在 Brent Noorda先生在上面的消息中说,(周末放出的)这个Demo将演示
- a bouncy-button game,
- real-time verification of user input into forms,
- an animated stick-figure,
- a way cool flashback into the psychadellic sixties.
的确,这些演示的功能大概是当时的JavaScript(LiveScript)不能实现的。但相同的功能所需求的特性及其基本实现,其实正是Netscape当时已发布的版本所包含的。所以这里根本就不存在Netscape抄袭Nombas的问题。然而换一个角度来想,Nombas可能正是看到Netscape发布版本中的种种特性,其实能够用一个嵌入到浏览器中的CEnvi来完成,因此发布了这样的一个示范版本。

从时间先后来分析,我们能确信的是:
- Netscape在网页中嵌入脚本是早在Espresso Pages出现之前的一个构想;
- JavaScript(LiveScript)是真正的第一个在万维网上使用的客户端脚本语言。

无论怎么,Espresso Pages非常好地展示了Netscape当时正在图谋的构想??不管是Nombas是和Netscape想到了一起,还是Nombas帮助 Netscape展开了(由Netscape设计的)蓝图。在当时(JavaScript 1.0发布之前),CEnvi中的Cmm相当完善,研发环境也非常成熟。所以能承认的是,Nombas的Espresso Pages的确更好地展示了Web的末来。不过,成为“因特网的一块重要基石”的构想??这里指页面内脚本,绝不是Nombas先创的理念。因为 Netscape beta1~3中已把这些理念都展示了出来。

其他
============
有一种Java的编译器也名为Mocha,但和本文中没有什么关系。

Cmm也称为C,但另外更有一种名为Sphinx C的语言,其设计目标和Cmm类似,但不是同一种语言。

在 Java热火的时代里,出现了非常多以浓咖啡(Espresso)命名的产品,但都不是这里的Espresso Pages。
Espresso Pages只是一些Demo页面,需要下载并专用安装一个CEnvi的特定版本才能查看。但这个特定版本在互连网上已绝迹了。

JavaScript 并没有从Java中寻找太多灵感,Brendan Eich自己说“my influences were awk, C, HyperTalk, Self”,这其中既不包括 Java,也没有Cmm的影子。不过Brendan Eich也说另外的影响是“combined with management orders to "make it look like Java."这强调的是一种形似,而不是语源上的承继关系。

在 1996年2月,CEnvi发布了最后一个2.x版本。这个版本是对以前版本的一些修补。但接下来,过了约一年半之后,CEnvi才发布下一个版本(v3.0)。从这个版本开始更名为ScriptEase,放弃了旧有的Cmm规格,而采用了JavaScript规范下的语法。并且自这个版本开始,ScriptEase发布Desktop和Web Server等多种不同的版本??此前CEnvi只有针对不同的操作系统的版本。所以事实上,非但不是Brendan Eich受到了Nombas的影响,反而是Nombas受JavaScript而放弃了整个原来的语言设计,而且在产品策略上,还抄袭了Netscape 的LiveWire战略。

Nombas后来被收购掉,ScriptEase等系列产品不再维护。Nombas.com网站仍然能访问,但只有一个告别页面,不过相应的,Netscape也好不到哪里去。

Mozilla是Netscape一个早期的Java研发团队的内部代码名。在Netscape 2.0 beta中包含的Java代码包中,就已能看到这一标志了。不过该团队真正独立出来成为开源组织,并最终接手Netscape未竟事业,则是晚至1998 年1月以后的事了。

Mozilla和Mozilla Firefox使用两套版本编号。所以“Mozilla 2”是2006.10月开始发起的,而当时MozillaFirefox 2.0b1已发布了??他基于“Mozilla 1”的维护版本。同样有趣的是,Mozilla Firefox 3.x则在基于“Mozilla 2”这个项目研发,大概,在2008年中期会发布正式版本。

据国外媒体报道,日前,来自Mozilla、谷歌、微软、Opera以及Webkit项目的专家齐集一堂,对浏览器的未来发展展开讨论。其中,与会者包括Arun Ranganathan(Mozilla基金会)、Chris Wilson(微软的网络平台构架师)、Brendan Eich(Mozilla基金会的首席技术官)、Charles McCathieNevile(Opera软件公司的首席标准官)、Darin Fisher(谷歌公司的软件工程师)。

其中,谷歌表示,该公司希望建立一个开源浏览器,而不是建立一个全新的渲染引擎。而毫无疑问地,由于很多人在很多领域使用“Webkit”,因此“Webkit”将会是渲染引擎的最佳选择。同时,谷歌表示,“Gecko”是一个建立应用程序的完整平台,功能非常之强大。

随着IE6逐渐退居幕后,市场上将不再拥有真正的单一浏览器主体引擎,因此,平台将会在浏览器的战争中取得最终的胜利。未来,平台也将会是Mozilla、谷歌、微软、Opera以及Webkit项目共同合作开发的领域。

谷歌表示,微软的Silverlight中可以实现的功能,该公司将会在HTML5中同样实现,并不是只有微软可以拥有这项专利。

最终,众小组成员达成共识表示:当务之急就是建立一个便于研发浏览器的市场,为更好地推动浏览器的发展打下基础。同时,这个市场将不会对Adobe的Flash和微软的Silverlight市场产生影响,因为这些垄断会使得市场变得更加有趣。

Javascript的创始人Brenden Eich表示,在建立各种标准中仍然存在着一些问题,但是工作人员正在努力改善,力图使得互联网的明天更加美好。

Javascript是网页的编程语言,Safari浏览器最新的测试版的JS引擎,在Acid 3测试中的性能表现良好。事实上,每个浏览器都拥有一个很大的JS渲染引擎,因此,只要好好撰写Javascript语言,那么浏览器的工作就不会有太大的困难。

微软发言人Chris Wilson表示:“随着IE8的到来,我们看到了浏览器的另一面,除了关注JS性能之外,还更加应该关注浏览器的整体性能以及用户界面。”

谷歌对于安全的回应就是,封锁用户的文件系统的登录权,完全隔离用户和骨干的操作。据了解,最新版本的Chrome和Safari就支持这些功能。

笔者认为,虽然这些巨头公司将会继续合作,但是浏览器之间的战争将会继续持久下去。现在,浏览器就是平台,如果您的电脑没有连接到互联网,那么您就无法对其进行操作,而未来,用户将可以使用浏览器进行任何操作。个人认为,下一个争夺领域将会是移动市场,因为每个人都有手机,但并不是每个人都有电脑。不久的将来,业界将会出现一个移动浏览器的标准。

相关链接:软件测试

打印】 【关闭窗口