官术网_书友最值得收藏!

1.5 為JavaScript正名

至2005年,JavaScript就已經誕生10年了。然而10年之后,這門語言的發明者Brendan Eich還在向這個世界解釋“JavaScript不是Java,也不是腳本化的Java(Java Scription)”。

這實在是計算機語言史上最罕見的一件事了。因為如今幾乎所有的Web頁面中都同時包含了JavaScript與HTML,而后者從一開始就被人們接受,前者卻用了10年都未能向開發人員說清楚“自已是什么”。

Brendan Eich在這份名為“JavaScript這十年(JavaScript at Ten Years)Brendan' s keynote 'JavaScript at Ten Years(Powerpoint)' for the ACM ICFP 2005 conference:http://developer.mozilla.org/en/docs/JavaScript_Language_Resources”的演講稿中,重述了這門語言的早期歷史:Brendan Eich自1995年4月受聘于網景公司,開始實現一種名為“魔卡(Mocha)”——JavaScript最早的開發代號或名稱的語言;僅兩個月之后,為了迎合Netscape的Live戰略而更名為LiveScript;到了1995年年末,又為了迎合市場對Java語言的熱情,正式地、也是遺憾地更名為JavaScript,并隨網景瀏覽器推出部分信息引自于以下文獻:《The History of JavaScript》:http://inventors.about.com/od/jstartinventions/a/JavaScript.htm《JavaScript Tutorial Part I》:http://www.techiwarehouse.com/

Brendan在這篇演講稿最末一行寫道:“不要讓營銷決定語言名稱(Don' t let Marketing name your language)”。一門被誤會了10年的語言的名字之爭,是不是就此結束了呢?仍然不是。因為這10年來,JavaScript的名字已經越來越亂,更多市場的因素困擾著這門語言,好像“借用Java之名”已經成了扔不掉的黑鍋。

1.5.1 JavaScript

我們先說正式的、標準的名詞:JavaScript。它實際是指兩個東西:

█ 一種語言的統稱。該語言由Brendan Eich發明,最早用于Netscape瀏覽器。

█ 上述語言的一種規范化的實現。在JavaScript 1.3之前,網景公司將他們在Netscape瀏覽器上的該語言規范的具體實現直接稱為JavaScript,并一度以“Client-Side JavaScript”與“Server-Side JavaScript”區分該語言在瀏覽器NN與NWS(Netscape Web Server)上的實現,但后來他們改變了這個做法。

1.5.2 Core JavaScript

Core JavaScript這個名詞早在1996年(或更早之前)就被定義過,但它直到1998年10月由網景公司發布JavaScript 1.3時才被正式提出來。準確地說,它是指由網景公司和后來的開源組織Mozilla,基于Brendan Eich最初版本的JavaScript引擎而發展出來的腳本引擎,是JavaScript規范的一個主要的實現者、繼承者和發展者。

Core JavaScript的定義如圖1-7所示。

圖1-7 官方手冊中有關Core JavaScript的概念說明

在JavaScript 1.3發布時,Netscape意識到他們不能僅僅以Client/Server來區分JavaScript,因為市面已經出現了很多種JavaScript。于是他們做了一些小小的改變:在發布手冊時,分別發布“Core JavaScript Guide”和“Client-Side JavaScript Guide”。前者是指語言定義與語法規范,后者則是該語言的一種應用環境與應用方法。

所以事實上,自1.3版本開始,Core JavaScript 1.x與JavaScript 1.x是等義的,換言之,我們現在常說的JavaScript 1.x,就是指Core JavaScript,而并不包括Client-Side JavaScript。不過,源于一些歷史的因素,在Core JavaScript中會有一部分關于“LiveConnect技術”的敘述及規范。這在其他(所有的)JavaScript規范與實現中均是不具備的。

不幸的是,Apple公司有一個基于KJS實現的JavaScript引擎,名為JavaScriptCore,屬于WebKit項目的一個組成部分,WebKit項目所實現的產品就是著名的開源跨平臺瀏覽器Safari。所以在了解Core JavaScript同時,還需強調它與JavaScriptCore的不同。

1.5.3 SpiderMonkey JavaScript

Brendan Eich編寫的JavaScript引擎最后由Mozilla貢獻給了開源界,SpiderMonkey便是這個產品開發中的、開源項目的名稱(code-name,即項目代碼名)。為了與我們通常講述的JavaScript語言區分開來,我們使用SpiderMonkey來特指上述由Netscape實現的、Mozilla和開源社區維護的引擎及其規范。

Mozilla Firefox 4.0以后的版本對SpiderMonkey進行了較大的更新,大量使用JIT(Just In Time)編譯技術來提升引擎性能事實上從Firefox 3.5中便開始加入JIT編譯引擎,這使得從Firefox 4.0至6.x版本中的SpiderMonkey總是同時帶有兩套JIT引擎,分別稱為TraceMonkey和JagerMonkey,來做執行期的優化。在Firefox 7之后的版本中,(計劃)將采用第三套JIT引擎,即IonMonkey。。并且從Firefox 4.0版本開始,Mozilla發布了JavaScript 1.8.5版本,開始支持ES5規范下的語言特性。

在本書此后的描述中,凡稱及SpiderMonkey JavaScript的,將是特指于此;凡稱及JavaScript的,將是泛指JavaScript這一種語言的實現。

1.5.4 ECMAScript

JavaScript的語言規范由網景公司提交給ECMA去審定,并在1997年6月發布了名為ECMAScript Edition 1的規范,或者稱為ECMA-262。4個月后,微軟在IE 4.0中發布了JScript 3.0,宣稱成為第一個遵循ECMA規范來實現的JavaScript腳本引擎。

而因為計劃改寫整個瀏覽器引擎的緣故,網景公司晚了整整一年才推出“完全遵循ECMA規范”的JavaScript 1.3。請注意到這樣一個問題:網景公司首先開發了JavaScript并提交ECMA標準化,但在市場的印象中,網景公司的Core JavaScript 1.3比微軟的JScript 3.0晚了一年實現ECMA所定義的JavaScript規范。這直接導致了一個惡果:JScript成為JavaScript語言的事實標準。

在本書此后的描述中,我們將基于ECMAScript Ed3的規范來講述JavaScript。凡未特別指明的敘述中,所謂JavaScript即是指“一種符合ECMAScript Ed3規范的JavaScript實現”。

1.5.5 JScript

微軟于1996年在IE中實現了一個與網景瀏覽器類似的腳本引擎,微軟把它叫做JScript以示區別,結果JScript這個名字一直用到現在。

直到JScript 3.0之后,JavaScript語言的局面才顯得明朗起來,如圖1-8所示。

圖1-8 JScript與JavaScript各版本間的關系

由于JScript成為JavaScript語言的事實標準,再有IE瀏覽器幾乎占盡市場(如果我們現在不是在討論JavaScript,你也可以把這個因果顛倒過來),因此在1999年之后, Web頁面上出現的腳本代碼基本上都是基于JScript開發的,而Core JavaScript 1.x卻變成了“(事實上的)被兼容者”。

直到2005年前后,源于W3C、ECMA對網頁內容與腳本語言標準化的推動,以及Mozilla Firefox成功地返回瀏覽器市場,Web開發人員開始注重所編寫的腳本代碼是否基于JavaScript的——即是ECMAScript的標準規范,這成為了新一輪語言之爭的起點。

1.5.6 總述

JavaScript這個名詞的多種含義見表1-2。

表1-2 名詞“JavaScript”的多種含義

主站蜘蛛池模板: 乌兰浩特市| 樟树市| 南充市| 许昌县| 额尔古纳市| 凤冈县| 宝鸡市| 靖宇县| 黄梅县| 中江县| 新丰县| 灵璧县| 来安县| 兴仁县| 阜康市| 北辰区| 鄂州市| 金堂县| 长寿区| 工布江达县| 河源市| 阿城市| 东平县| 洮南市| 台山市| 怀安县| 博白县| 富蕴县| 阜康市| 讷河市| 资源县| 息烽县| 靖西县| 中阳县| 蕉岭县| 衡水市| 胶州市| 定西市| 克拉玛依市| 黑龙江省| 青冈县|