迟来的真相:关于JavaScript的历史

今天看到李松峰老师(@李松峰)发布了新版的《JavaScript高级程序设计》(第三版)的预售消息,于是跑去当当(在这里)仔细地读了一下新版有关“JavaScript起源”的段落。读罢,心中的种种不安一扫而空:在这本书的第三版,总算还原了JavaScript起源的真相。

话说有一本《JavaScript权威指南》,以及这本《JavaScript高级程序设计》,算这些年对前端界/JavaScript圈子影响最大的、JavaScript经典译著。然而前者历来对JavaScript的起源语焉不详,后者则正好相反,从第一版起便“详细(而又错误地)”地指出了“JavaScript的起源”:

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

当网上冲浪越来越流行时,对于开发客户端脚本的需求也逐渐增大。当时工作于Netscape的Brendan Eich,开始着手为即将在1995年发行的Netscape Navigator 2.0开发一个称之为LiveScript的脚本语言……

然而正是这误指的源起,(至少在国内)造成了相当多的误解。我后来在写《JavaScript语言精髓与编程实践》过程中,为此甚是苦恼:不说吧,不对;写吧,罗嗦嗦地讲进书里,也是不好。后来才写了:

《还原JavaScript的真实历史》 

http://blog.csdn.net/aimingoo/article/details/1932315

这篇博客,在这里引出了《JavaScript高级程序设计》第一版中“错误叙述”的原文。并在我的书中把考据类的信息指到这里。

再后来,我又读到《JavaScript高级程序设计》的第二版,这一版是在2010年的杭州D2(第五届)大会上偶然所得(也是奇遇,呵呵),是Nicholas签名的中文版。然而关于JavaScript的起源这件事,在这一版中仍是采用此前的说法,没有什么变化。

因此,当时Hedger送我这本书时,我便跟他约好,我得再写一篇关于“JavaScript起源”的文章,请他转译、转交给Nicholas。——我所“偶得”的这一本,正是Hedger送来,并且与Nicholas还很熟。这才有了我关于这一问题的“详图实证”:

详图实证:关于JavaScript的语源问题

http://blog.csdn.net/aimingoo/article/details/6654742

这篇文章发在《程序员》杂志上,而我则将一篇摘选另寄给了Hedger。再之后的消息,就不得而知了。

如今新版的《JavaScript高级程序设计》总算在这个问题上有了新的描述,而不再将起源问题指向C--,这便已是相当令人振奋的事实了。至于这中间有或没有几分个人的努力,其实已是在这种欣喜之外的事情。我所关注的,是总算在“JavaScript类的书籍”中,关于这个问题有了较一致的说法,而不至于让人左右难从了。

在新的、第三版《JavaScript高级程序设计》中“JavaScrip简史”的叙述如下:

1.1 JavaScript简史

在Web日益流行的同时,人们对客户端脚本语言的需求也越来越强烈。那个时候,绝大多数因特网用户都使用速度仅为28.8kbit/s的“猫”(调制解调器)上网,但网页的大小和复杂性却不断增加。为完成简单的表单验证而频繁地与服务器交换数据只会加重用户的负担。想象一下:用户填写完一个表单,单击“提交”按钮,然后等待30秒钟,最终服务器返回消息说有一个必填字段没有填好……当时走在技术革新最前沿的Netscape公司,决定着手开发一种客户端语言,用来处理这种简单的验证。

当时就职于Netscape公司的布兰登?艾奇(Brendan Eich),开始着手为计划于1995年2月发布的Netscape Navigator 2开发一种名为LiveScript的脚本语言——该语言将同时在浏览器和服务器中使用(它在服务器上的名字叫LiveWire)。为了赶在发布日期前完成LiveScript的开发,Netscape与Sun公司建立了一个开发联盟。在Netscape Navigator 2正式发布前夕,Netscape为了搭上媒体热炒Java的顺风车,临时把LiveScript改名为JavaScript。

由于JavaScript 1.0获得了巨大成功,Netscape随即在Netscape Navigator 3中又发布了JavaScript 1.1。Web虽然羽翼未丰,但用户关注度却屡创新高。在这样的背景下,Netscape把自己定位为市场领袖型公司。与此同时,微软决定向与Navigator竞争的自家产品Internet Explorer浏览器投入更多资源。Netscape Navigator 3发布后不久,微软就在其Internet Explorer 3中加入了名为JScript的JavaScript实现(命名为JScript是为了避开与Netscape有关的授权问题)。以现在的眼光来看,微软1996年8月为进入Web浏览器领域而实施的这个重大举措,是导致Netscape日后蒙羞的一个标志性事件。然而,这个重大举措同时也标志着JavaScript作为一门语言,其开发向前迈进了一大步。

微软推出其JavaScript实现意味着有了3个不同的JavaScript版本:Netscape Navigator中的JavaScript、Internet Explorer中的Jscript和ScriptEase中的CEnvi。与C及其他编程语言不同,当时还没有标准规定JavaScript的语法和特性,3个不同版本并存的局面已经完全暴露了这个问题。随着业界担心的日益加剧,JavaScript的标准化问题被提上了议事日程。

在“CEnvi是JavaScript的一个实现(而并非起源)”这一点上,Nicholas终于做出了正确的描述。虽然,大概在细节的时间上还略值得探究,但已经是无伤大局的了。

是为纪念,即便来之迟迟,也是真相的成功罢!

_