JavaScript创始人Brendan Eich访谈录
是什么促使你去开发JavaScript?
对于JavaScript的早期历史,我在自己的博客中写过: 我在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进行反向工程的成果)的内容,还包括Borland和少数其他公司的成果。 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编写的游戏,这其中有新开发的,也有从其他平台移植过来的,比如以下两个: 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开发者必须遵守的内容约束。更多的内容可以参考下面这个文档: 你预计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年就会重复发现一些以 前曾经被发现过的东西。当然,近些年来大家也做了大量的工作,但我要说的,学生们不止要从最近的知识中学习,还要向过去的那些大师们学习。 该文章在 2010/2/7 20:58:35 编辑过 |
关键字查询
相关文章
正在查询... |