JavaScript 恩仇錄
作者:丁文濤 https://www.yuque.com/dingwentao/blog/ti968l
前段時(shí)間看了一本書(shū)講 ?JS 發(fā)展史的書(shū)(感謝 @doodlewind 翻譯這本書(shū))??赐旰团笥蚜牧藭?huì)兒,他說(shuō)你別和我嘮什么規(guī)范、語(yǔ)言設(shè)計(jì),我就想聽(tīng)八卦,你和我嘮八卦,我就不困了。所以就有了這篇盡量減少技術(shù)細(xì)節(jié)的八卦文,文章略長(zhǎng),各位看官慢慢品。
JavaScript(下文簡(jiǎn)稱(chēng) JS )是 目前最為流行的編程語(yǔ)言之一,在計(jì)算機(jī)的世界里它也是一個(gè)軟件。如今,我們使用它編寫(xiě)頁(yè)面和數(shù)據(jù)交互邏輯、搭建組件庫(kù)、實(shí)現(xiàn)可視化效果和各種算法等等。StackOverflow 聯(lián)合創(chuàng)始人 Jeff Atwood 曾說(shuō): “所有能用 JS 實(shí)現(xiàn)的,最終都將使用 JS 實(shí)現(xiàn)”[1],目前來(lái)看似乎已經(jīng)得到了部分的證實(shí)。
同其他同類(lèi)一樣,作為一門(mén)編程語(yǔ)言性質(zhì)的軟件,JS 有 bug、也會(huì)倒排趕工期、經(jīng)歷迭代,還有來(lái)自“老板”的需求,甚至還有多部門(mén)共建時(shí)搞出了一堆問(wèn)題的情況。今天,和大家一起扒一扒這段曲折精彩的歷史。
互聯(lián)網(wǎng)的新紀(jì)元

1991 年 8 月 2 日,一位來(lái)自歐洲核子研究組織的工程師 Time Berners Lee 在郵件組里群發(fā)說(shuō)他做了一個(gè)項(xiàng)目,叫萬(wàn)維網(wǎng)(World Wide Web),這個(gè)項(xiàng)目里大致做了這樣幾個(gè)東西: 一個(gè)用于網(wǎng)絡(luò)傳輸?shù)膮f(xié)議 (HTTP)、一個(gè)超文本標(biāo)記語(yǔ)言(HTML)、一個(gè)命令行的瀏覽器、一個(gè)在 NeXT 電腦上 運(yùn)行的 HTML 編輯器、一個(gè)服務(wù)端可以生成文件的軟件。目的是給物理學(xué)家們交流新聞、信息、文檔,項(xiàng)目比較初級(jí),希望感興趣的人聯(lián)系他一起交流[2]。從互聯(lián)網(wǎng)誕生之日起,Web 的初心就相當(dāng)純粹:“希望提供人人可以訪問(wèn)的、用來(lái)交流分享信息的場(chǎng)所”。
很快,這個(gè)項(xiàng)目就從高能物理學(xué)圈這個(gè)使用范圍逐漸擴(kuò)大到其他使用計(jì)算機(jī)的用戶上,1992 年,世界上有了 26 個(gè)網(wǎng)站,這個(gè)年底,在美國(guó)國(guó)家超級(jí)電腦應(yīng)用中心工作的兩名小伙 Andreessen 和 Bina,在同行產(chǎn)品的啟發(fā)下搞了另外一個(gè)新的瀏覽器取名 Mosaic,相比于命令行的瀏覽器,Mosaic 具有更美觀的圖形化界面、更加好用一些。一下讓本來(lái)還不算火爆的互聯(lián)網(wǎng)火爆了起來(lái),到 1995 年,世界上存在的網(wǎng)站數(shù)量已經(jīng)超過(guò)了 1 萬(wàn)個(gè)[3]。
誕生之日

在這一發(fā)不可收拾的浪潮中,1994 年 Andreessen 和 Bina 和硅谷圖形公司的 Jim Clark,成立了一家新的叫做 Netscape(網(wǎng)景) 的公司,希望做出更好的瀏覽器替代 Mosaic,在 1994 年 10 月,公司發(fā)行了一款新的瀏覽器 Netscape Navigator,這款瀏覽器很快就火了,逐步替代掉了 Mosaic。
在當(dāng)時(shí),微軟 Office 套件中提供了可以自定義的 VB 來(lái)編寫(xiě)一些特殊功能, 蘋(píng)果也提供了 AppleScript 來(lái)解決用戶想要自己編寫(xiě)特殊腳本的需求。業(yè)界也涌現(xiàn)了是不是要有一門(mén)語(yǔ)言能讓開(kāi)發(fā)者操作 HTML 的想法。1995 年 網(wǎng)景 招聘了一名之前從事 Unix 網(wǎng)絡(luò)、內(nèi)核這些底層開(kāi)發(fā)的程序員 Brendan Eich,希望他來(lái)解決瀏覽器里操作 HTML 的語(yǔ)言的問(wèn)題。
當(dāng)時(shí)商業(yè)環(huán)境復(fù)雜,1995 年,Sun 公司開(kāi)始為即將發(fā)布的 Java 做各種營(yíng)銷(xiāo),找到了網(wǎng)景,希望做一些合作。網(wǎng)景表達(dá)了合作意向,希望在 Netscape Navigator 2 中集成 Java,這個(gè)合作意向讓 Brendan Eich 的工作徹底難辦起來(lái),不僅技術(shù)選型更困難了,距離發(fā)布會(huì)的時(shí)間也相當(dāng)?shù)亩獭6虝r(shí)間實(shí)現(xiàn) Java 和 HTML 的整合是不可能的,且 Java 還沒(méi)正式發(fā)布, 第一版也不好用,包括 老板 Andreessen 本人對(duì) Java 也有一定的懷疑。這次運(yùn)營(yíng)活動(dòng),讓開(kāi)發(fā)很為難,最后 Andreessen 拍板臨時(shí)實(shí)現(xiàn)一門(mén)語(yǔ)言,最后這門(mén)語(yǔ)言最后應(yīng)該會(huì)叫做 “JavaScript”。
Brendan Eich 本來(lái)是想集中精力搞一個(gè)運(yùn)行在瀏覽器的 Scheme 語(yǔ)言,但是這次時(shí)間顯然非常倉(cāng)促,公司還要求在外表上盡量接近 Java 并且學(xué)習(xí)使用門(mén)檻要低。他花了 10 天完成了語(yǔ)言的原型,后面稍微做了一些補(bǔ)充性的改動(dòng),在 1995 年 9 月正式發(fā)版[4]。在這一段時(shí)間里,Eich 除了要實(shí)現(xiàn)老板提到的這些需求,也摻雜了大量的過(guò)往經(jīng)驗(yàn)。JS 的背后有很多設(shè)計(jì)參考了 C、Self、HyperTalk、Awk、Logo、Lisp 這些語(yǔ)言。當(dāng)時(shí)有人提出需要實(shí)現(xiàn)和 Java 一樣的面向?qū)ο蠊δ埽菚r(shí)間顯然不夠,Eich 參考了 Self 實(shí)現(xiàn)了原型模式[5]。

就這樣,經(jīng)歷了倒排、來(lái)自老板的需求、面向發(fā)布會(huì)編程,JS 開(kāi)啟了它的歷史使命。
瀏覽器之爭(zhēng)

早在 1994 年,微軟向網(wǎng)景表達(dá)了低價(jià)收購(gòu)意向,被網(wǎng)景拒絕了。微軟也在蓋茨的領(lǐng)導(dǎo)下開(kāi)始將戰(zhàn)略調(diào)整到 Web 方向上[6],開(kāi)始重點(diǎn)投入 IE 瀏覽器。微軟和網(wǎng)景也從此進(jìn)入了對(duì)峙階段。
在 JS 正式發(fā)布后,微軟立刻宣布,接下來(lái)會(huì)致力于將 VB 推廣為 Web 的主要語(yǔ)言。但直到第二年 5 月底,微軟才宣布自己做了個(gè)和語(yǔ)言無(wú)關(guān)的標(biāo)準(zhǔn),支持包括 JS、VBScript 在內(nèi)的多種腳本語(yǔ)言。
而這一年對(duì)微軟來(lái)說(shuō)也是難過(guò)的一年,Robert Welland 于 95 年 10 月加入微軟,主要工作就是研究 VB、JS 在 Web 上的支持。首先,VB 團(tuán)隊(duì)評(píng)估要支持 Web 工時(shí)大概是兩年,希望 VB 直接支持的瀏覽器的希望破滅了。同時(shí),JS 在當(dāng)時(shí)沒(méi)有規(guī)范可言,為了支持這門(mén)語(yǔ)言,Welland 等微軟工程師需要逆向的去猜測(cè)網(wǎng)景實(shí)現(xiàn)的那版 JS 的底層實(shí)現(xiàn),逆向的結(jié)果讓他們十分震驚和迷惑,罵聲不斷。網(wǎng)景的同行也在這段時(shí)間遭受了大量來(lái)自微軟的批評(píng)。最后,他們基于 VB 的一些特性,實(shí)現(xiàn)了一個(gè)腳本的子集,叫 VBScript,另外基于對(duì) JS 的逆向,稱(chēng)之為 JScript[7],最后這些被打包為 ActiveScript,在 96 年 5 月發(fā)布。
因?yàn)樵?JS 上遭受了不少的同行批評(píng),網(wǎng)景的老板 Andreessen 希望 Eich 投入到 語(yǔ)言規(guī)范的投入上。而 Eich 這段時(shí)間只想把 JS 前一版本中遺留的一些問(wèn)題給解決掉,并且優(yōu)化對(duì)應(yīng)的性能,和老板的安排發(fā)生了一些沖突,所以 有個(gè)性的 Eich 回家辦公了兩周,集中時(shí)間開(kāi)發(fā)了一個(gè)新的版本的引擎,代號(hào)為 Spider Monkey[8],這次改造后性能有了較大提升。
Web 從誕生之日便決定了它開(kāi)放的性質(zhì),任何想要壟斷和封閉的行為都會(huì)失去市場(chǎng)。在開(kāi)放的環(huán)境中競(jìng)爭(zhēng),微軟和網(wǎng)景的競(jìng)爭(zhēng)暴露了 JS 在標(biāo)準(zhǔn)實(shí)現(xiàn)上的不足,因?yàn)橐婚_(kāi)始沒(méi)有標(biāo)準(zhǔn)可言,讓互聯(lián)網(wǎng)的開(kāi)發(fā)者們?cè)馐芰烁嗟耐纯?,不得不說(shuō),商業(yè)和技術(shù)兩全其美的愿望是艱難的。
事實(shí)標(biāo)準(zhǔn)

在商業(yè)視野上來(lái)說(shuō),Andreessen 的判斷并沒(méi)有錯(cuò),他的期待是能將 JS 這門(mén)語(yǔ)言推廣為 Web 腳本的事實(shí)標(biāo)準(zhǔn)。商場(chǎng)如戰(zhàn)場(chǎng),一旦微軟主導(dǎo)了開(kāi)發(fā)語(yǔ)言,比如使用 VB 開(kāi)發(fā) Web,瀏覽器乃至整個(gè)互聯(lián)網(wǎng)都會(huì)有走向封閉的趨勢(shì)。
包含著商業(yè)利益的目的,網(wǎng)景和 Sun 在 1996 年春天非常積極的在尋找一個(gè)標(biāo)準(zhǔn)化組織制定 JS 的標(biāo)準(zhǔn)化。同時(shí)希望做到微軟可以參與,但是不能成為標(biāo)準(zhǔn)化的主導(dǎo)者。他們找了 W3C 和 IETF 兩個(gè)組織,W3C 元老級(jí)人物 Time Berners Lee 等人反對(duì)由 W3C 來(lái)制定 JS 標(biāo)準(zhǔn),IETF 更多是關(guān)注各類(lèi) Web 標(biāo)準(zhǔn)協(xié)議的事情,覺(jué)得 JS 標(biāo)準(zhǔn)不適合他們來(lái)制定。此時(shí),網(wǎng)景的標(biāo)準(zhǔn)化專(zhuān)家恰好認(rèn)識(shí) ECMA 組織的秘書(shū)長(zhǎng),另外 Sun 也是 ECMA 的會(huì)員,利用人脈關(guān)系,可以做到又快速的產(chǎn)出標(biāo)準(zhǔn),又能將微軟的參與度控制在合適的范圍內(nèi)。為了討論這個(gè)標(biāo)準(zhǔn),他們成立了第 39 號(hào)技術(shù)小組(簡(jiǎn)稱(chēng) TC39)來(lái)討論。
TC39 小組有一些公約,比如將 HTML 標(biāo)準(zhǔn)交給 W3C 去制定自己不參與、同時(shí)不討論這門(mén)語(yǔ)言在特定平臺(tái)和環(huán)境下的功能。在他們的第一次討論會(huì)上,主要有網(wǎng)景和微軟提供的兩份標(biāo)準(zhǔn)化文件,其中微軟的兩名貢獻(xiàn)者語(yǔ)言背景更為專(zhuān)業(yè)和深厚一些,他們對(duì)標(biāo)準(zhǔn)的講解的內(nèi)容受到了更多人的喜歡。經(jīng)過(guò)很多次會(huì)議討論,求同存異,ECMA 組織制定出了第一版 JS 標(biāo)準(zhǔn)。
因?yàn)?「JavaScript」 的商標(biāo)是由 Sun 注冊(cè)的,Sun 明確表示不會(huì)將這個(gè)商標(biāo)轉(zhuǎn)移給 ECMA 標(biāo)準(zhǔn)組織,最后經(jīng)過(guò)各種抉擇,選擇使用 ECMAScript 來(lái)作為發(fā)布標(biāo)準(zhǔn)的語(yǔ)言名稱(chēng),文檔編號(hào) 262,所以 JS 的標(biāo)準(zhǔn)文檔都叫 Standard ECMA-262。
到此 ECMAScript 第一版發(fā)布完畢,但是國(guó)際化標(biāo)準(zhǔn)組織(ISO)經(jīng)過(guò)審核發(fā)現(xiàn)了很多問(wèn)題,希望 ECMA 進(jìn)行一部分修改,所以 這中間又發(fā)了一版,稱(chēng)為 ES2,因?yàn)楦膭?dòng)很小,所以這個(gè)版本很少被提及。有趣的是,TC39 在并不知道 ISO 這邊非得發(fā)一個(gè)新的版本才能通過(guò)審核之前就開(kāi)始了下一階段的討論,所以他們開(kāi)啟了 V2 版本的討論實(shí)際上對(duì)應(yīng)發(fā)版的是 ECMAScript 3。
伴隨著標(biāo)準(zhǔn)化的進(jìn)程,開(kāi)發(fā)者們也逐漸意識(shí)到所謂的「JavaScript」本質(zhì)上只是一個(gè)噱頭,跟 Java 沒(méi)有半毛錢(qián)關(guān)系。此時(shí)也誕生了一位著名的 JS 布道師,就是寫(xiě)了那本 《JavaScript 語(yǔ)言精粹》的 Crockford[9],他做了 JS 的初版壓縮工具 JSMIN、第一個(gè) JS 的 Lint 工具、還定義了 JSON 這種數(shù)據(jù)格式。這位大佬不多說(shuō),后面我們還會(huì)提到他。
革新年代

1997 年,微軟發(fā)布了電子郵件客戶端的 Web 版本[10], 后續(xù)他們更新了一個(gè)新的版本使用了動(dòng)態(tài) HTML,還使用了一個(gè)新的瀏覽器 API,叫 XMLHttp,這個(gè) API 可以做到不刷新頁(yè)面也能更新局部的 UI,這個(gè)在如今看來(lái)不起眼的小功能在當(dāng)時(shí)可是了不得的一項(xiàng)突破。雖然微軟技術(shù)超群,但是這種技術(shù)廣為人知的版本卻是:“2000 年左右,Gmail 使用這項(xiàng)技術(shù)實(shí)現(xiàn)他們的 Web 版本,從此世界上的 Web 技術(shù)發(fā)生了革新,正式進(jìn)入 互聯(lián)網(wǎng) 2.0 時(shí)代”。
伴隨著技術(shù)的革新,網(wǎng)頁(yè)的復(fù)雜度也在倍數(shù)增長(zhǎng),瀏覽器兼容性又十分惱人。為了開(kāi)發(fā)者良好的體驗(yàn),這個(gè)階段成長(zhǎng)起來(lái)相當(dāng)多的 JS 工具,比如 Dojo、Prototype、MooTools、jQuery 這些在一定程度上給開(kāi)發(fā)者屏蔽了處理瀏覽器的細(xì)節(jié)。針對(duì)這種現(xiàn)象,甚至出現(xiàn)了一個(gè)新的詞來(lái)定義。在暫時(shí)不支持某項(xiàng)功能瀏覽器上支持新特性的補(bǔ)丁腳本 --- Polyfill[11] [12]。
也正是在這個(gè)發(fā)展過(guò)程中,網(wǎng)景遭受來(lái)自微軟的惡意競(jìng)爭(zhēng),一方面大公司碾壓級(jí)別斗小公司,外加微軟的操作系統(tǒng)瀏覽器捆綁,網(wǎng)景逐漸式微,1998 年網(wǎng)景最終選擇開(kāi)放瀏覽器源代碼(后發(fā)展為 Firefox),公司主體也被美國(guó)在線收購(gòu)。而微軟成為了這次競(jìng)爭(zhēng)的贏家,后續(xù)也在不思進(jìn)取逐步又丟失了自己創(chuàng)造的大好局面。
網(wǎng)景的這幫人,雖然在商業(yè)上的競(jìng)爭(zhēng)上失敗,但從失敗后選擇開(kāi)源繼續(xù)做瀏覽器這件事上看,真的是令人佩服,為純粹和理想主義點(diǎn)贊。
宏圖愿景
1998 年,JS 標(biāo)準(zhǔn) ES3 基本完成了標(biāo)準(zhǔn)和瀏覽器對(duì)語(yǔ)言實(shí)現(xiàn)的接軌。TC39 也開(kāi)始籌劃新版本的 JS 標(biāo)準(zhǔn) ES4, 對(duì)于 ES4 語(yǔ)言專(zhuān)家們初期的想法都是希望能成為新的里程碑,改掉老設(shè)計(jì)中錯(cuò)誤的地方。在這之前,大家構(gòu)想了特別多的想法,比如支持 class 和 模塊 還有 package 等概念,這些提案沒(méi)有納入 ES3 標(biāo)準(zhǔn),所以希望在 ES4 中能添加。
在 ES4 的討論會(huì)上,來(lái)自惠普贊助的 W3C 研究員提出一個(gè)叫做 Spice 的提案[13],用于將 HTML/CSS/JS 結(jié)合的更緊密,這個(gè)提案整體反饋比較負(fù)面。但是部分內(nèi)容值得考慮。討論了幾輪沒(méi)啥結(jié)果,為了確保 99 年 1 月能提交一份合理的提案給 TC39, 他們單獨(dú)成立了一個(gè)小組叫 TC39-Spice,討論了一些高級(jí)一點(diǎn)的概念,比如類(lèi)型注解、類(lèi)、接口、流式執(zhí)行模型等特性,里面有大量的內(nèi)容都和 ES3 不兼容。當(dāng)時(shí) ES3 還沒(méi)正式發(fā)版,討論中其實(shí)遇到很多沒(méi)解決的問(wèn)題,但是大家精力還是集中在 ES3 的發(fā)版上。
2000 年,微軟覺(jué)得目前關(guān)于 ES4 的提案太大了,砍掉了一些,希望 12 月能發(fā)布,當(dāng)時(shí)微軟的興趣就在于「類(lèi)型注解」。到當(dāng)年的 6 月,微軟發(fā)布了 .NET Framework, 在這之前他們因?yàn)轫?xiàng)目的保密性沒(méi)法和 TC39 討論 .NET,但是發(fā)布之后他們就可以好好聊一聊了,于是他們找了 TC39 里的核心成員討論了一些 ES4 標(biāo)準(zhǔn)上的分歧,也沒(méi)得到個(gè)所以然。更讓人頭大的事情是 微軟希望 ECMA 能承擔(dān) .NET 的標(biāo)準(zhǔn)化工作,于是又讓 TC39 去搞 .NET 的標(biāo)準(zhǔn)化,本來(lái)討論 JS 的小組,被降級(jí)為 TC39-TG1,后面參與的人越來(lái)越少,這個(gè)小組最終降級(jí)成為了一個(gè)討論 ECMAScript 對(duì) XML 的支持小組,最終搞了一個(gè)標(biāo)準(zhǔn)叫 E4X,這標(biāo)準(zhǔn)搞出來(lái)就是個(gè)失敗的產(chǎn)品,最后只有 Firefox 實(shí)現(xiàn)了這個(gè)標(biāo)準(zhǔn),現(xiàn)在已經(jīng)沒(méi)人知道他是干嘛的了。
從 98 年到 2000 年,兩年時(shí)間大家興致沖沖的設(shè)定了下一代編程語(yǔ)言的宏圖愿景,最終卻因?yàn)闉g覽器斗爭(zhēng)、沒(méi)有核心領(lǐng)袖牽頭人導(dǎo)致發(fā)展十分混亂, 最后黯然收?qǐng)觥?/p>
不死心與理想派

2000 年,一家叫 Macromedia(宏媒體)的公司,發(fā)明了一個(gè)新的軟件叫 Flash,并且配套了一門(mén)編程語(yǔ)言 ActionScript,當(dāng)年 Flash 大紅大紫,從 03 年左右開(kāi)始,F(xiàn)lash 在 web 開(kāi)發(fā)中得到了比較多的應(yīng)用。因?yàn)?ActionScript 是基于 ECMAScript 來(lái)實(shí)現(xiàn)的,隨著發(fā)展,AS 遇到了較大的發(fā)展瓶頸時(shí),想改語(yǔ)言本身,恰好又有來(lái)自 TC39 的大佬,所以想著是不是能把 AS 的一些改造推到標(biāo)準(zhǔn)里面一起建設(shè),其實(shí)這里本質(zhì)上和微軟的思路一樣,希望以自己家的東西成為事實(shí)標(biāo)準(zhǔn)。
2004 年,ES4 還沒(méi)有討論個(gè)所以然出來(lái),作為元老,Breadan Eich 在投入 Firefox 開(kāi)發(fā)的間隙中抽時(shí)間站出來(lái)說(shuō)你們這樣搞不行,Web 本身就是開(kāi)放的,你這一會(huì)兒 .NET, 一會(huì)兒 ActionScript, 搞這些封閉的東西,莫不是想毀掉老夫的心血?
差不多到 2005 年,工作小組終于可以抽時(shí)間搞語(yǔ)言本身的事情,差不多花了兩年時(shí)間,Eich 帶著小組搞了差不多五十多個(gè)提案,像解構(gòu)、let、const 、iterator、generator 這些東西都是在這段時(shí)間內(nèi)完成設(shè)計(jì)的。但是這門(mén)語(yǔ)言是不兼容之前版本的,幾家歡喜幾家愁。
這兩年微軟全程沒(méi)有參與規(guī)范的制定。這里一位大佬橫空出場(chǎng),Allen Wirfs-Brock,作為微軟的專(zhuān)家,出于對(duì)微軟戰(zhàn)略層面上的考慮,覺(jué)得 ES4 這個(gè)改動(dòng)可能會(huì)讓 ActionScript 變成和 Java、C# 一樣的企業(yè)級(jí)開(kāi)發(fā)語(yǔ)言,會(huì)威脅到微軟,所以微軟你要安排點(diǎn)資源到 JavaScript 標(biāo)準(zhǔn)上來(lái)。等他參與進(jìn)來(lái)安排同事發(fā)了封郵件聲明了微軟對(duì) ES4 的反對(duì)[14], 這郵件把 Eich 給氣壞了,直接回了一句 「Profiled specs are evil(Profile 提案真的邪惡)」。
與此同時(shí),前文提到的 Douglas Crokford 也是 ES4 的反對(duì)者,他覺(jué)得安全的兼容比任何優(yōu)異的特性更為重要,于是微軟、雅虎的兩名核心人物成了 ES4 的反對(duì)者。另外 ES4 也很艱難,還有很多問(wèn)題沒(méi)解決,規(guī)范也沒(méi)有產(chǎn)出,現(xiàn)在又有了兩大反對(duì)者,確實(shí)很難辦。
后續(xù)差不多分裂出來(lái)兩派人物,一派繼續(xù)支持 ES4 的開(kāi)發(fā),一派繼續(xù)保持兼容開(kāi)發(fā) ES 3.1。
2008 年 6 月,Adobe 放棄了支持 ES4 開(kāi)發(fā),也標(biāo)志著 ES4 規(guī)范設(shè)計(jì)的失敗,從 1998 到 2008,ES4 背負(fù)了太多歷史使命,花了十年最終還是難產(chǎn)了。
ES4 失敗了,但我突然喜歡上了 Breadan Eich 這個(gè)技術(shù)人,很純粹,討厭封閉的行為,希望 Web 始終保持開(kāi)放,雖然失敗,但還是得給他點(diǎn)贊。
偏見(jiàn)
說(shuō)到這,大家肯定覺(jué)得,Allen Wirfs-Brock 這個(gè)人不是好人啊,這兩年內(nèi)微軟也沒(méi)參與 ES4 的建設(shè),你跑過(guò)來(lái)就是一頓指指點(diǎn)點(diǎn),說(shuō)三道四,最后 ES4 涼了,你們微軟高興了吧。
但作為一個(gè)技術(shù)人,還是不要輕易評(píng)判。一方面 Allen Wirfs-Brock 肯定發(fā)現(xiàn)了 ES4 的問(wèn)題,另外一方面肯定也有一定的私心,為自己的雇主微軟工作。后面他做的這些事情,或許你也會(huì)改變對(duì)他的看法。
他率先整理了所有 JScript 和 JS 之間的差異,主動(dòng)努力去解決兼容性的問(wèn)題,不再討論 .Net 這些東西在 Web 上的支持,而是就以 JS 的發(fā)展為主要目標(biāo),穩(wěn)步的迭代出 3.1 版本,為了測(cè)試最后瀏覽器的兼容問(wèn)題,主動(dòng)公開(kāi)了 IE 的 JScript 實(shí)現(xiàn)原型,Mozilla 本身就是開(kāi)源,Chrome 也在類(lèi)似的時(shí)間宣布了谷歌瀏覽器的測(cè)試套件。
可以說(shuō),ES3.1 幾乎讓受盡折磨的開(kāi)發(fā)者們看到了一絲曙光,未來(lái)還是值得期待的,總有一天,能和兼容性說(shuō)再見(jiàn) ?。ES3.1 最終在提交之后發(fā)布成為 ES5。
代號(hào)「和諧」

在完成 ES5 之后,大家似乎都認(rèn)識(shí)到彼此的初心,都不是為了競(jìng)爭(zhēng),單純出于廠商斗爭(zhēng)的目的變小了。TC39 成員開(kāi)始著手下個(gè)迭代的開(kāi)發(fā)。
這中間其實(shí)經(jīng)歷了非常多的發(fā)展,比如 Coffescript 讓大家意識(shí)到可以通過(guò)一門(mén)語(yǔ)言編譯到 JS 來(lái)曲線救治 JS 這門(mén)語(yǔ)言,Google 也開(kāi)始開(kāi)發(fā) 性能超群的 V8 引擎,CommonJS 模塊規(guī)范、服務(wù)端的 Node 也橫空出世了。沒(méi)必要躡手躡腳的保持原有的 JS 標(biāo)準(zhǔn)小步子迭代了。
新版本的 ES 在社區(qū)也被成為 ES Harmony,TC39 設(shè)立了新的提案機(jī)制[15]、倡導(dǎo)者機(jī)制,讓大家可以通過(guò)規(guī)范化的流程來(lái)實(shí)現(xiàn)語(yǔ)言標(biāo)準(zhǔn)。
曲線登頂?shù)奈④?/span>
作為一個(gè)卑微的前端開(kāi)發(fā),剛開(kāi)始工作那會(huì)兒,我一直有個(gè)萌新的認(rèn)知: “我寫(xiě)的 JS 和微軟沒(méi)有什么關(guān)系,但是我寫(xiě)的兼容代碼,一定和微軟有關(guān)系”。
最近幾年,事情似乎悄悄發(fā)生變化,我的編輯器變成了 微軟開(kāi)發(fā)的 VSCode,我常逛的開(kāi)源社區(qū) Github 被微軟收購(gòu)了,我用的包管理 npm 也被微軟收購(gòu)了,我用的 TypeScript 也是微軟開(kāi)發(fā)的。
今天我還知道了,Ajax 也是微軟最早在弄的,JavaScript 的標(biāo)準(zhǔn)規(guī)范甚至也一直被微軟主導(dǎo)著,微軟就像那只看不見(jiàn)的手,主導(dǎo)著萬(wàn)千開(kāi)發(fā)者。
也許是花了幾十年才讓這家公司明白,封閉是無(wú)法獲得投票的,擁抱開(kāi)放才是當(dāng)今時(shí)代的精神,這幾年的微軟,確實(shí)牛逼。
題外話
我現(xiàn)在工作和區(qū)塊鏈相關(guān),有很多人問(wèn)我,你一個(gè)前端和搞區(qū)塊鏈有毛關(guān)系?。?/span>
你們知道么?Brendan Eich 現(xiàn)在離開(kāi)了 Firefox,開(kāi)了一家公司叫「Brave」,還是做瀏覽器,不過(guò)是基于區(qū)塊鏈技術(shù)的。你說(shuō)祖師爺都搞區(qū)塊鏈了,我能不跟著走么?
如果你正在尋找一份祖師爺也在做的工作,「螞蟻鏈招前端」
歡迎聯(lián)系我,發(fā)送郵件至「[email protected]」。
參考資料
[1] Jeff Atwood: https://en.wikipedia.org/wiki/Jeff_Atwood
[2] The Birth of The Web: https://home.cern/science/computing/birth-web/short-history-web
[3] NCSA Mosaic: https://en.wikipedia.org/wiki/Mosaic_(web_browser)
[4] Brendan Eich 談 JavaScript 的誕生: https://web.archive.org/web/20150817165652/http://devchat.tv/js-jabber/124-jsj-the-origin-of-javascript-with-brendan-eich
[5] Prototype Based Programming: https://en.wikipedia.org/wiki/Prototype-based_programming
[6] The Internet Tidal Wave: https://web.archive.org/web/20110724184430/http://www.lettersofnote.com/2011/07/internet-tidal-wave.html
[7] JScript: https://en.wikipedia.org/wiki/JScript
[8] Spider Monkey: https://developer.mozilla.org/zh-CN/docs/Mozilla/Projects/SpiderMonkey
[9] Douglas Crockford https://en.wikipedia.org/wiki/Douglas_Crockford
[10] MicroSoft Outlook on the Web: https://en.wikipedia.org/wiki/Outlook_on_the_web
[11] What is Polyfill https://remysharp.com/2010/10/08/what-is-a-polyfill/
[12] Polyfill 方案的過(guò)去、現(xiàn)在和未來(lái) https://github.com/sorrycc/blog/issues/80
[13] Spice 提案: https://www.ecma-international.org/archive/ecmascript/1998/TC39WG/980928-spice-docs/index.html
[14] 簡(jiǎn)化 ES4 版本討論: https://web.archive.org/web/20071103151603/http://wiki.ecmascript.org:80/doku.php?id=discussion:browser_profile
[15] TC39 Process https://tc39.es/process-document/

