掃描二維碼關注

首頁 APP開(kāi)發小(xiǎo)程序開(kāi)發 微信公衆号 網站建設 營銷推廣 經典案列 産品服務 關于我們

“學習(xí)不僅是掌握知識”

向書(shū)本學習(xí),還要向實踐學習(xí)、向生活學習(xí)。消化已有(yǒu)知識,
而且要力求有(yǒu)所發現、有(yǒu)所發明(míng)、有(yǒu)所創造

JavaScript是Web的(de)彙編語言(二):瘋狂 亦或隻是精神錯亂

2019/4/6 10:38:24

JavaScript是Web的(de)彙編語言(二):瘋狂 亦或隻是精神錯亂

有(yǒu)些人(rén)認爲“JavaScript是Web的(de)彙編語言”完全是精神病說的(de)話(huà)。爲此,我詢問了幾位JavaScript權威,比如(rú)Brendan Eich(JavaScript之父)、Douglas Crockford(JSON之父),還有(yǒu)Mike Shaver(Mozilla技術(shù)副總裁)。以下都(dōu)是從個(gè)人(rén)郵件(jiàn)裏摘過來的(de),得到(dào)了以上(shàng)幾位的(de)許可(kě)。

Mike Shaver:

以前我就聽說過這種比較,我認爲很大(dà)程度上(shàng)确實如(rú)此。但(dàn)是,這種說法忽視了JS開(kāi)發人(rén)員與機器(qì)之間的(de)人(rén)機工(gōng)程學方面的(de)大(dà)量努力,因爲彙編語法設計(jì)得沒有(yǒu)那麽人(rén)性化(特别是現代的(de)彙編語言)。

Brendan Eich:

幾年前,我曾說過“JS是Web的(de)x86”(好像是在一次JSConf上(shàng)),不過我不敢說我是第一個(gè)這麽說的(de)。(Nick Thompson今年也(yě)在Hacker News中這麽說過。)

關鍵在于,JS确實在按照(zhào)我們想的(de),越來越往低級方向發展了。但(dàn)它也(yě)具備高(gāo)級的(de)特性。

Shaver說得沒錯,彙編缺少(shǎo)可(kě)靠的(de)宏處理(lǐ)器(qì),因此不适合程序員,也(yě)不夠安全。但(dàn)JS可(kě)不是這樣。所以,這個(gè)比喻需要加點限制(zhì)條件(jiàn),不然就要鬧出笑(xiào)話(huà)來了。

無論從高(gāo)級函數式編程還是内存安全角這個(gè)角度看,還是從低級特性,像類型化數組以及即将成爲現實的(de)ES中類型化數組的(de)擴展、二進制(zhì)數據,等等來說,JS都(dōu)是一個(gè)比彙編更加強大(dà)的(de)編程語言。當然了,内存安全是首要的(de)區别。

Douglas Crockford:

就這個(gè)問題來說,我覺得說JavaScript是Web的(de)虛拟機更接近一些。過去我們一直都(dōu)把Java的(de)JVM看成是Web的(de)虛拟機,但(dàn)結果呢,JavaScript才是。

從提供代碼安全的(de)角度說,JavaScript的(de)解析器(qì)比JVM的(de)字節碼驗證器(qì)更有(yǒu)效。就兌現“編寫一次,到(dào)處運行(xíng)”這個(gè)諾言來看,JavaScript更出色;這或許正是因爲它是在較高(gāo)層次上(shàng)運行(xíng),才得以避免觸及一些底層的(de)棘手問題。因爲它把剩下的(de)事兒都(dōu)交給圖靈去解決了。

當然啦,也(yě)有(yǒu)不少(shǎo)人(rén)始終不肯承認JavaScript能(néng)把一切都(dōu)處理(lǐ)好,我過去就是這樣一個(gè)人(rén)。而現在我則不斷地(dì)被眼前這種百花齊放(fàng)的(de)景象震撼著(zhe)。

Brendan Eich,補充:

Doug說源代碼強過字節碼,說得太好了。很早以前,我的(de)朋友(yǒu),加州大(dà)學歐文(wén)分(fēn)校(xiào)的(de)Michael Franz教授就指出了Java驗證器(qì)O(n^4)級别的(de)複雜性(計(jì)算機時鍾周期失控,拒絕服務)。精簡之後的(de)JS呢,确實傳輸更便捷,而且詞法/語法分(fēn)析也(yě)相(xiàng)當快。

(JS)源代碼作爲“字節碼”同樣也(yě)避免了Java字節碼的(de)一個(gè)很傻的(de)問題:凍結設計(jì)不良的(de)Java低級形式,導緻高(gāo)級形式的(de)源代碼也(yě)無法解決這個(gè)問題。換句話(huà)說,Java唯恐破壞其字節碼的(de)兼容性。而這嚴重影響了Java内部類及其泛型的(de)設計(jì)。——不管怎麽說,Sun最後還是破壞了字節碼的(de)兼容性。

以下是前一段時間Nick Thompson在YCombinator說過的(de)話(huà):

這隻是我個(gè)人(rén)的(de)看法:我花了自己兩年時間,想盡可(kě)能(néng)讓JVM能(néng)夠與JavaScript互通。當時的(de)Netscape有(yǒu)不少(shǎo)人(rén)認爲字節碼作爲移動代碼的(de)基礎比較好。但(dàn)Sun從頭搭建了自己大(dà)而全的(de)軟件(jiàn)體系,把問題搞得很複雜。他(tā)們沒有(yǒu)想讓Java與其他(tā)語言溝通,更别提讓Java能(néng)嵌入其他(tā)軟件(jiàn)中了。他(tā)們的(de)字符串處理(lǐ)代碼都(dōu)是用(yòng)一種解釋型語言來寫,而不肯用(yòng)C來玷污自己!有(yǒu)什(shén)麽我就說什(shén)麽,Netscape,這個(gè)當時Java唯一的(de)一個(gè)大(dà)客戶,在Sun眼裏無非就是一個(gè)用(yòng)來實現他(tā)們取代Windows夢想的(de)工(gōng)具而已。所有(yǒu)想用(yòng)Java的(de)人(rén)都(dōu)是自己給自己找罪受。

在此期間,Brendan一個(gè)人(rén)幹了10個(gè)工(gōng)程師(shī),外加3個(gè)客戶服務人(rén)員的(de)活兒,同時還要關注Web作者在乎的(de)一些事,比如(rú)把JS代碼混合到(dào)HTML中、即時加載、與浏覽器(qì)其他(tā)模塊的(de)集成等等,此外還要協調其他(tā)浏覽器(qì)廠(chǎng)商,以便讓JS成爲一個(gè)開(kāi)放(fàng)标準。

因此,今天的(de)JS作爲Web的(de)x86彙編程序,并沒有(yǒu)像它本該的(de)那樣完美(měi),但(dàn)你(nǐ)通過它真能(néng)把事情稿定(GWT就是一個(gè)最明(míng)顯的(de)例子)。這可(kě)以說是一個(gè)經典的(de)“更差就是更好”的(de)例子,隻不過Java也(yě)就是從下往上(shàng)那麽看起來更好罷了。而JS則在此期間取得了相(xiàng)當不錯的(de)成就。要想取代它的(de)地(dì)位可(kě)沒那麽容易。

當然,這個(gè)比喻不一定準确。JavaScript代碼無論從外觀到(dào)行(xíng)爲,肯定不像ASM。但(dàn)作爲一個(gè)比喻,至少(shǎo)可(kě)以說明(míng):

JavaScript無所不在;

它速度快而且越來越快;

JavaScript酷似低級的(de)Web編程語言;

它可(kě)以通過手工(gōng)編寫,也(yě)可(kě)以從另一種語言編譯而來。

諸如(rú)此類的(de)話(huà)題也(yě)經常在Hacker News中出現:

“現在的(de)JavaScript其實就是客戶端的(de)彙編語言。想改它太難了,所以得想辦法開(kāi)發一些工(gōng)具來解決這個(gè)問題。”——jonnycat

好啦,能(néng)聽到(dào)如(rú)此有(yǒu)見地(dì)、有(yǒu)深度,而又(yòu)詳盡的(de)討(tǎo)論,該滿足了吧(ba)。親愛的(de)讀(dú)者,你(nǐ)們太棒了
 


深圳市南山區南山街(jiē)道南海(hǎi)大(dà)道西(xī)桂廟路(lù)北陽光(guāng)華藝大(dà)廈1棟4F、4G-04

咨詢電話(huà):136 8237 6272
大(dà)客戶咨詢:139 0290 5075
業(yè)務QQ:195006118
技術(shù)QQ:179981967

更多可(kě)以了解的(de)信息

客戶案列
新聞資訊
資質榮譽
團隊風采
項目進度查詢

售前QQ咨詢
QQ溝通 項目QQ溝通

精銳軟件(jiàn)

Copyright© 2018-2023 深圳市無窮大軟件技術有限公司 All Rights Reserved. 京ICP證000000号 公安備案号:粵公網安備44030502009460号