文/何其甚
学习一门语言,充分了解其发展历史,会有助于更好地理解这门语言。知道其发展历史,你会明白它为什么是这个样子,而不是那个样子;它过去和现在存在什么样的问题,将来要解决什么问题,可以说对我们的学习研究和开发工作具有相当的裨益。
JavaScript的诞生相当有意思,它不像C、Java等其他语言从开始设计到诞生都经历了比较长的一段时间。JavaScript从设计到诞生只用了10天。
这位就是JavaScript的开山祖师爷:Bremdan Eich(布兰登·艾奇)。
要说JavaScript的诞生得从一家美国公司开始说起,公司就是美国网景通信公司(Netscape Communications Corporation)。在20世纪90年代网景公司开发的网景浏览器(Netscape)一度成为浏览器市场占有率的霸主。网景公司前身公司叫“MOSAIC Communication Corp”,公司注册于1994年4月4日。Mosaic公司在1994年10月13日发布了beta版的Netscape浏览器,命名为Mosaic Netscape 0.9,该浏览器一发布就成为当时相当热门的浏览器。提到“mosaic”不得不还得说下美国伊利诺州的伊利诺大学的国家超级计算机应用中心(National Center for Supercomputing Applications,简称NCSA)。NCSA在1993年发布了互联网上第一个或得普遍使用和能够显示图片的网页浏览器,名字就叫Mosaic。NCSA拥有Mosaic的商标权,并且伊利诺大学将技术转让给了另一家公司望远镜娱乐公司(Spyglass Entertainment)。Mosaic公司为了避免和NCSA的商标权问题,在1994年11月14日,正式更名为网景通信公司(Netscape Communications Corporation)。
刚开始的网景浏览器是一款名副其实的浏览器,就是只能浏览,无法与用户互动。网景想去解决这个问题,当时想了两种办法,一个是利用现有的语言,如Perl、Python、Scheme等等允许它们直接嵌入网页,另一个办法是发明一种全新的语言。这两种选择各有利弊,第一个选择实现起来有些难度,但能够充分利用现有的代码和程序员资源,推广起来比较容易,第二个选择推广起来会有一定的难度,但有利于开发出完全适合的语言,实现起来也比较容易。到底采用哪一种实现方式,公司内部争执不下。这种情况一直持续到了1995年。
1995年发生了一件大事,5月23日,Java语言诞生并向市场推广,犹如晴天一声惊雷。Sun公司大肆宣传,这种语言可以“一次编写,到处运行(Write Once,Run Anywhere)”。在那个时代Java就让人感觉是未来的主宰。Java强势推出,使得网景公司的整个管理层都成了Java信徒。网景公司决定与Sun公司结成联盟,Sun公司因此完全介入网页脚本语言的决策,它不仅允许Java程序以applet的形式直接在浏览器中运行,甚至还考虑将Java作为脚本语言嵌入网页,只是那样做会使Html网页过于复杂,后来不得不放弃。
JavaScript祖师爷布兰登就在这个时间登场了,当年他是34岁的系统程序员,1995年4月被网景公司录用。公司录用他的初始目的是研究将Scheme语言作为网页脚本语言的可能性。布兰登的主要方向和兴趣是函数式编程,以为进入公司后,会主要与Scheme语言打交道。
但是短短一个月之后,因为Java的诞生,网景公司做出决策,未来的网页脚本语言必须“看上去与Java足够相似”,但是要比Java简单,使得非专业的网页作者也能快速上手。这实际上就是将Perl、Python、Scheme等编程语言排除在外了。布兰登被指定为这种“简化版Java语言”的设计师。
布兰登为了应付公司安排的任务,他用了10天就将JavaScript设计了出来。由于设计时间太短,语言的一些细节考虑的不够严谨,导致后来的很长一段时间,JavaScript写出来的程序混乱不堪。当时的设计思路是这样的:
(1)借鉴C语言的基本语法;
(2)借鉴Java语言的数据类型和内存管理;
(3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;
(4)借鉴Self语言,使用基于原型(prototype)的继承机制;
(5)借鉴Perl语言的正则表达式;
(6)借鉴Python语言的字符串和数组处理。
所以JavaScript语言是一个大杂烩,结果就是(简化的)函数式编程+(简化的)面向对象编程。
作为JavaScript的作者,布兰登并不喜欢自己的这个作品,他自己都说:“与其说我爱它,不如说我恨它。它是C语言和Self语言一夜情的产物。十八世纪英国文学家约翰逊博士说得好:‘它的优秀之处并非原创,它的原创之处并不优秀。’(the part that is good is not original,and the part that is original is not good.)”ECMA JavaScript2.0标准化委员会委员、Web开发领域的知名技术权威Douglas Crockford(道格拉斯 克罗克福德 )这样评价JavaScript:“JavaScript设计的最出色的就是它的函数的实现。它近乎接近于完美。...... 函数在javascript中是顶级对象,它是第一个成为主流的Lambada语言,它是披着C外衣的Lisp。”
JavaScript完成伊始并不是现在这个名字,刚开始命名为Mocha,紧接着又改名为LiveScript,最后才定名为现在所用的名字。随后在当年与网景浏览器2.0版本一同上市。名字中带有“Java”并不是因为和Java有多深的关系,而是为了更好的推广,这是公司的决定。
JavaScript伴随着浏览器诞生,了解浏览器的历史可以从另一个方面了解JavaScipt的发展历程。
网景浏览器(Netscape Navigator)历史:
1994年10月13日 Mosic Netscape 0.9
1994年12月15日 改名为Netscape Navigator, 1.0发布
1995年8月搭载cookie、框架frame和LiveScript等多种功能的1.2版发布
1996年3月2.0发布搭载JavaScript1.0
1996年8月3.0发布
1997年6月发布4.0,功能特色多,软件不稳定,对网页标准支持不佳、各种漏洞
1998年1月与微软竞争失利,开源并内部出成立了非正式组织Mozilla
1998年10月发布4.5版
2000年11月14日采用Gecko引擎的Netscape 6.0发布
2002年7.0发布,基于Mozilla 1.0.1
2003年6月30日7.1发布,基于Mozilla1.4
2003年7月15日网景公司解散,当天Mozilla基金会成立
2004年8月最后一个基于Mozilla的Netscape7.2发布,基于Mozilla1.7.2
网景公司在1996年向ECMA International(欧洲计算机制造联合会)提交了JavaScirpt进行标准化,并最终确定出了新的语言标准,它就是ECMAScipt。网景公司提交标准是对微软IE竞争的重要反击,它的目的有下面几点:
(1)开发或者确定标准;
(2)寻求合作伙伴支持标准
(3)宣布标准并公布规格供其他公司采用
(4)开发基于标准的产品
但是十分不幸,双方的实力相差太悬殊了。
微软IE浏览器历史
1995年8月16日IE1诞生,是和望远镜娱乐公司(Spyglass Entertainment)之间授权协议的产物
1995年11月模仿网景浏览器IE2发布
1996年8月IE3发布,微软反向工程JavaScript脚本语言,并由此推出了一个面向IE浏览器的Jscript for IE,放弃了Spyglass的原始代码
1997年10月IE4发布,集成在windows操作系统中,这一年网景浏览器竞争失利
1999年3月发布IE5,随后集成到当年9月发布的win98SE
2001年10月IE6月WinXP、WinServer2003一同推出,市场占有率接近90%
2006年10月IE7发布
2009年3月IE8发布,但是来的太晚了,Mozilla Firefox 和 Google Chrome开始抢夺市场
2011年3月IE9发布
2012年10月IE10发布,Win8专属浏览器
2013年IE11与Win8.1一块发布,IE系列最终版本,IE11在面对新网络标准的兼容性上落后与主要竞争对手
2015年8月Edge
ECMAScipt历史
1996年11月网景公司向ECMA提交JavaScript标准,ECMA的39号技术委员会(TC39)负责制定和评审这个标准,委员会的成员由业内大公司派出的工程师组成
1997年6月ECMA发布ECMA-262第一版
1998年4月ISO/IEC(国际标准化组织和国际电工委员会)认可了ECMA-262标准
1998年6月ECMA发布ECMAScript2.0
1999年12月发布ECMAScript3.0,第三版标志着ECMAScript成为了一门真正的编程语言,也成为了JavaScript的通行标准,得到了广泛的支持
2007年10月ECMAScript4.0草案发布,4.0版目标过于激进,以Yahoo、Microsoft、Google为首的大公司反对大幅度升级,主张小幅度改动,而以布兰登为首的Mozilla公司坚持该草案
2008年7月ECMA决定终止4.0版本开发,将其中涉及现有功能改善的一小部分,发布为ECMAScript3.1,会后不久就改为了ECMAScript5.0
2009年12月ECMAScript5.0发布,5版本与3版本基本保持兼容
2011年6月ECMAScript5.1发布,成为ISO国际标准(ISO/IEC 16262:2011),到 2012年底,所有主要浏览器都支持5.1版的全部功能
2013年3月ECMAScript6.0草案冻结,不在添加新功能,新的功能将被放到ECMAScript7
2013年12月ECMAScript6.0草案发布,然后是12个月的讨论期,听取各方反馈
2015年6月ECMAScript6.0正式发布,并且更名为ECMAScript2015,以后将以ECMAScript+年份的形式进行命名
JavaScript的版本命名,很长的一段时间中网景公司在内部依旧使用自己的版本号,这导致JavaScript有了不同与ECMAScript的版本号。
1996年3月,Navigator 2.0内置了JavaScript 1.0
JavaScript 1.1版对应ECMAScript 1.0
直到JavaScript 1.4版才完全兼容ECMAScript 1.0
JavaScript 1.5版完全兼容ECMAScript 3.0
目前的JavaScript 1.8版完全兼容ECMAScript 5
纵观上述的历史事件总结以下几个问题:
1、JavaScript与ECMAScript的关系
ECMAScript只是用来标准化JavaScript语言的基本语法结构。与部署环境相关的标准由其他标准规定,如W3C组织制定的DOM标准。ECMAScript是规格,JavaScript是一种实现(后续会再谈Js引擎)。
2、JavaScript与Java的关系
他们两个是两种不同的语言,不存在父子关系。JavaScript设计时有借鉴并模仿Java,名字中带有“Java”原意就是“很像Java的脚本语言”,为了更好的推广。
3、JavaScript与JScript
他们两个是不同的,不是等价的,JScript是微软对ECMAScript标准的实现,只能用在微软IE浏览器之中,针对IE有特性扩展,JavaScript虽然是网景公司研发但确是面向所有浏览器的。JScript诞生之初与ECMAScript标准并不兼容,其中一些特性后来被添加的ECMAScript标准之中。
涉及的标准化组织:
ECMA(European Computer Manufactures Association),欧洲计算机制造联合会,非盈利组织,位于日内瓦,成立于1961年,目标是发展标准和技术报告以便促进和标准化对信息处理和电信系统的使用过程,其成员由世界上一些主流的技术公司组成;
ISO(International Organization for Standardization),国际标准化组织,非政府性组织,是国际标准化领域中一个十分重要的组织,成立于1946年,总部设于瑞士日内瓦,成员包括162个会员国,参加者包括各会员国的国家标准机构和主要公司;
IEC(International Electrotechnical Commission),国际电工委员会,非政府性国际机构 ,是世界上成立最早的国际性电工标准化机构,负责有关电气工程和电子工程领域中的国际标准化工作,成立于1906年,总部最初位于伦敦,1948年搬到了位于日内瓦的现总部处,IEC标准的权威性是世界公认的,在信息技术方面ISO与IEC成立了联合技术委员会(JTC1)负责制订信息技术领域中的国际标准。有些标准中会出现ISO/IEC;
W3C(World Wide Web Consortium ),万维网联盟 ,Web技术领域最具权威和影响力的国际中立性技术标准机构,成立于1994年10月,W3C 最重要的工作是发展 Web 规范(称为推荐,Recommendations),这些规范描述了 Web 的通信协议(比如 HTML 和 XHTML)和其他的构建模块,如浏览器中DOM标准和CSS标准。
参考内容:
Bremdan Eich https://brendaneich.com/
阮一峰《JavaScript诞生记》 http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html
阮一峰 《JavaScript语言的历史 》http://javascript.ruanyifeng.com/introduction/history.html
ECMA http://www.ecma-international.org/
https://en.wikipedia.org/wiki/Netscape_Navigator_2
https://en.wikipedia.org/wiki/Timeline_of_web_browsers
http://tech.163.com/15/0319/06/AL25FH9P000915BF.html