久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

WebAssembly系列2

 quasiceo 2016-07-29

WebAssembly系列2-為什么我們需要WebAssembly—采訪Brendan Eich

摘要 為什么我們需要WebAssembly—采訪JavaScript之父Brendan Eich。 WebAssembly javascript asm.js SIMD

     在2015.06.17,, JavaScript之父Brendan Eich宣布了一個(gè)新項(xiàng)目:將新的底層功能(low level primitives)帶入web中[1],,?這將使在瀏覽器或其他JavaScript環(huán)境中采用類似于C & C++等語(yǔ)言編寫(xiě)的項(xiàng)目的編譯更加容易。如果是第一次聽(tīng)到這個(gè)想法,,可參見(jiàn)閱讀"What is WebAssembly”的基本描述[3],。

    WebAssembly團(tuán)隊(duì)包括來(lái)自Google, Microsoft, Mozilla, Apple, 以及W3C WebAssembly Community Group(社區(qū)團(tuán)體)的成員。

    這份聲明使web開(kāi)發(fā)界猜測(cè)WebAssembly可能會(huì)如何影響到JavaScript的未來(lái), Eric Elliott(下面簡(jiǎn)稱EE)采訪了Brendan Eich(下面簡(jiǎn)稱BE).


  EE: 最近,,你在博客中宣布將開(kāi)始WebAssembly新項(xiàng)目,,基本上就是一個(gè)web匯編語(yǔ)言,一個(gè)底層編譯目標(biāo),。 能否講下它是做什么的,,背后的動(dòng)機(jī)是什么。

  BE: 這在某種程度上是從ASM.js就開(kāi)始的一個(gè)持續(xù)過(guò)程,。ASM.js是JavaScript的一個(gè)子集,,沒(méi)有對(duì)象, 沒(méi)有垃圾回收, 沒(méi)有JIT編譯器中斷(just in time compiler pauses)。它的目標(biāo)是C/C++—JavaScript的一個(gè)靜態(tài)類型子集,。這已經(jīng)由Mozilla以及大型游戲廠商, Epic Games公司的Unreal引擎以及Unity公司的Unity引擎和IDE演示過(guò)了,。 

    這樣,大量的游戲就可以用自己的引擎來(lái)發(fā)布,,市場(chǎng)上有Unreal引擎3和Unreal引擎4, 而基于Unity 5建立的游戲是用另外一種指令集作為JavaScript的目標(biāo),。

    這些游戲過(guò)去可能瞄向PS4、XBox和PC?,F(xiàn)在他們也可以利用WebGL,、ASM.js、web音頻與其他重要的APIs,、平板游戲APIs,、全屏APIs等瞄向web

    當(dāng)我在Mozilla公司的時(shí)候,,ASM.js就取得了非凡的成功,,現(xiàn)在已經(jīng)轉(zhuǎn)向了微軟,。我記得幾年前與Anders Hejlsberg和Steve Lucco談?wù)撨^(guò),Anders是做C#和.NET,,Steve帶領(lǐng)Chakra團(tuán)隊(duì),。他們都非常感興趣,Edge開(kāi)始支持ASM.js,,通過(guò)在線優(yōu)化達(dá)到好的性能,,就像Mozilla對(duì)模塊優(yōu)化所做的那樣。

    其實(shí),,我認(rèn)為這是對(duì)Native Client的最后一擊,,或者說(shuō),是對(duì)真正可移植的原生Client(Portable Native Client:PNaCl)的最后一擊,。PNaCl是Google唯一可以將瀏覽器中的C & C++編譯為安全原生Client的版本,,但從來(lái)沒(méi)有在chrome中完全發(fā)揮出作用。對(duì)一些Google屬性來(lái)說(shuō)它放在白名單中,,我認(rèn)為Google+有一個(gè)圖形編輯器,。

    隨著時(shí)間發(fā)展,完全原生client不會(huì)擴(kuò)展到其他瀏覽器上,,如果打算做的話將有很長(zhǎng)的道路要走,。盡管ASM.js起初沒(méi)有線程,沒(méi)有鎖,,沒(méi)有原生代碼中需要的大量功能:沒(méi)有SIMD (single instruction, multiple data: 單指令多數(shù)據(jù)),,沒(méi)有現(xiàn)代CPUs中包含的向量單元(vector unit)的短向量?jī)?nèi)聯(lián)函數(shù)(short vector intrinsics for vector units)。

    的確,,JavaScript之前沒(méi)有這些功能,,但現(xiàn)在情況正在變化。SIMD已經(jīng)在Firefox支持,,V8將支持,,Intel已經(jīng)在他們的V8版本中有一個(gè)實(shí)現(xiàn),Crosswalk支持,,而且Microsoft宣布將在Chakra中支持SIMD,。

    (譯者注:Chakra JavaScript引擎支持微軟Edge瀏覽器以及Windows 10中使用HTML/CSS/JS編寫(xiě)的應(yīng)用。

    假設(shè)web停滯,,雖然這個(gè)假定不好,,我認(rèn)為之前的PNaCl和Dart等項(xiàng)目是個(gè)錯(cuò)誤。它們都假定JavaScript能力不夠,,不能改善,,因此他們必須要做一些事情,因此有了第二套系統(tǒng),,或第三套系統(tǒng)增加到了瀏覽器中,,然而沒(méi)有完全融入到Chrome中,。

    這里我并非沾沾自喜,實(shí)際情況是我們需要漸進(jìn)式發(fā)展,。所有的瀏覽器必須小步前進(jìn),。這真的是Firefox與Chrome在瀏覽器競(jìng)爭(zhēng)中的一個(gè)功能-Firefox領(lǐng)先。當(dāng)然情況也會(huì)發(fā)生變化,,2000年之前IE達(dá)到95%的市場(chǎng)份額,Microsoft沒(méi)有再投資web,,而是投向了.NET和Windows Presentation Foundation(譯者注:Windows Presentation Foundation (WPF) 的首要目標(biāo)在于協(xié)助開(kāi)發(fā)人員建立吸引人又有效率的用戶界面),。

    無(wú)論如何不能總是看歷史,ASM.js的持續(xù)發(fā)展是wasm,,這非常重要,,理由是一旦ASM.js跨入其他瀏覽器,情況就越來(lái)越清晰,,它會(huì)跨入所有的瀏覽器,。

    然而,JavaScript,,甚至JavaScript的子集ASM.js都沒(méi)有SIMD,、線程、共享內(nèi)存和其他基礎(chǔ)功能(primitives),。對(duì)于ASM.js仍然需要解析JavaScript,,但它只是一個(gè)子集。你可以對(duì)該子集運(yùn)行一個(gè)專門的解析器,,這又是一項(xiàng)維護(hù)瑣事,,因?yàn)楝F(xiàn)在有了兩個(gè)解析器,一個(gè)解析器用于完整的JavaScript語(yǔ)言,,另一個(gè)解析器用于JS子集ASM.js,。

    這樣將面臨代價(jià)很高的解析問(wèn)題,但可以用一個(gè)更加高效的,,壓縮的抽象語(yǔ)法樹(shù)(abstract syntax tree:AST),,這就是WebAssembly的目的。

    當(dāng)人們被問(wèn)到web上的字節(jié)碼(bytecode),,就認(rèn)為是Java字節(jié)碼,。我認(rèn)為微軟和其他地方的研究人員已經(jīng)表明那不是他們想要的,在許多地方都很令人難受,,AST編碼就好的多,。

    首先,WebAssembly開(kāi)始就像ASM.js一樣,,但是用一個(gè)壓縮的語(yǔ)法,,一個(gè)二進(jìn)制語(yǔ)法,。但是一旦所有的瀏覽器支持了wasm和ASM.js,然后在一些瀏覽器版本更新后,,就可以開(kāi)始增加更多的無(wú)需添加到JavaScript的語(yǔ)義(semantics)到wasm中,。

    實(shí)際上可以在JavaScript和wasm都添加,因?yàn)槭峭粋€(gè)引擎(1vm),,但有一些不想放入JavaScript的功能就可以放入wasm,,這樣可以利用C++或Haskell等語(yǔ)言的優(yōu)點(diǎn)。有大量的語(yǔ)言都可以編譯為wasm,。


  EE: 可以舉一些例子嗎?

  BE: 好,,這都在GitHub中有寫(xiě)到, 就是將共享內(nèi)存數(shù)組buffers要讓多線程游戲交叉編譯,這是對(duì)JavaScript施加的一個(gè)壓力,,因?yàn)檫@花費(fèi)了最多的時(shí)間,,我們不想要JavaScript中的競(jìng)爭(zhēng)條件?—?它總是在一個(gè)BUG很多的脆弱進(jìn)程中。這是一個(gè)我們想要放到WebAssembly中的一個(gè)例子,,如果我們可以選擇的話,。

    沿著這個(gè)思路,還有很多類似的功能,,例如零花費(fèi)異常(zero cost exception)在JavaScript中可能沒(méi)有意義,,這些功能需要一些編譯器和runtime聰明一些,但他們對(duì)于C++和Swift是有意義的,。

    另一個(gè)例子是call/cc (call-with-current-continuation),。Call/cc是非常強(qiáng)大的一個(gè)工具,它對(duì)JavaScript引擎的實(shí)現(xiàn)和安全風(fēng)險(xiǎn)都提出了挑戰(zhàn),。

    還有一些非本地函數(shù)的gotos,,可以調(diào)用一個(gè)continuation進(jìn)入到另外一個(gè)棧。所以這些是不同于ES6 generators中本地,、受限的continuations,。它們是更深的continuation。所以call/cc可以放入wasm,,放入同時(shí)能夠處理wasm與JavaScript的引擎,。這是可以想象到的。它不必進(jìn)入JavaScript語(yǔ)言但可以成為WebAssembly語(yǔ)法,,同時(shí)不影響之前的JavaScript語(yǔ)言,。


  EE: 說(shuō)到這里,那wasm是否存在安全風(fēng)險(xiǎn)需要仔細(xì)考慮呢?

  BE: 因?yàn)樗_(kāi)始與ASM.js共存,,因此不會(huì)增加任何新的安全風(fēng)險(xiǎn),,但可能在1-2年后開(kāi)始新的分支,那時(shí)就需要查看所有擴(kuò)展的安全屬性。這是一項(xiàng)新的挑戰(zhàn),,這也是Google做native client成員思考最多的,,他們?cè)谶@個(gè)領(lǐng)域的知識(shí)將非常有幫助。

     我們正在努力消除PNaCl和Emscripten在使用C++和LLVM編譯器中那些不確定的行為,。從硬件向上查到C++規(guī)范,,存在大量不確定行為,這不利于安全,。

    JavaScript已經(jīng)遠(yuǎn)遠(yuǎn)超過(guò)規(guī)范中那些內(nèi)容,,將努力比其他語(yǔ)言更安全。對(duì)于WebAssembly,,需要做的比JavaScript還要多,。


  EE: 在register中有一條有意思的頭條新聞:你是否正試圖殺死JavaScript? 事實(shí)的真相是什么呢?

  BE: [笑] 不, 我是實(shí)用主義者,。我不是有經(jīng)驗(yàn)的C/C++ hacker,這是一個(gè)大系統(tǒng),,大家都在努力, 但也面臨著web上的兼容性約束,。

    你不能違反web,不能了卻往事從頭開(kāi)始,。任何想要嘗試這樣做的人都將失敗,。

    甚至當(dāng)你看移動(dòng)設(shè)備上的原生應(yīng)用時(shí),用戶界面與圖片都有相當(dāng)成熟的原生語(yǔ)言和工具包,,但還是有大量的web,,存在大量的hybrid apps。

    Facebook仍然在使用web views,。所有的大型應(yīng)用,,Amazon, Pinterest等等都在使用web views。有大量的web應(yīng)用是很愚蠢地使用native表示層而不是HTML編寫(xiě),,這純粹是重復(fù)發(fā)明輪子,。所以web仍然是非常非常重要的,它也是盈利最多的平臺(tái),。

    智能手機(jī)已經(jīng)到處都是,。在幾年之內(nèi),地球上幾乎每個(gè)成年人都將人手一部智能手機(jī),,這是非常巨大的一個(gè)量級(jí),,但這并不真正意味著智能手機(jī)就是一臺(tái)PC, 它更多的仍然是一個(gè)消費(fèi)級(jí)設(shè)備。不像你現(xiàn)在正在坐著,,輸入信息,,從事研究,更深入地購(gòu)物。

    所以殺死JavaScript是不可行的,,我正在做的是對(duì)真正的ASM.js的工程問(wèn)題做出響應(yīng),。從Epic公司的Unity引擎加載一個(gè)大的游戲會(huì)花20-30秒,這太長(zhǎng)了,。利用壓縮的抽象語(yǔ)法樹(shù)編碼將快20倍,,僅需要幾秒鐘。所以對(duì)wasm是有真正的需求,,這是個(gè)有效需求,。

    Wasm幫助JS贏得勝利,它不僅僅是原生代碼編譯的勝利,。最終所有的瀏覽器和webviews都將支持wasm語(yǔ)法來(lái)服務(wù)于編譯目標(biāo)主人,,并釋放JavaScript以便它可以服務(wù)于JavaScript主人。

    JavaScript曾經(jīng)有過(guò)分房子階段,,但長(zhǎng)期來(lái)說(shuō)是不可行的,。就像我說(shuō)的,即使共享數(shù)組buffer延伸,,那也只是對(duì)JavaScript做的一點(diǎn)點(diǎn)延伸,,如果可以讓wasm做C++想要做的一些外部工作,而不需要想各種辦法將這些不安全的事情放入JavaScript,,將可以極大緩解JavaScript的壓力,。

      所以,提升解析性能而不是服務(wù)于兩個(gè)masters,,才是做wasm的真正原因,。我們并非是殺死JavaScript,我認(rèn)為不可能殺死JavaScript,。


               “天沒(méi)有塌下來(lái).”

      EE: 這對(duì)于擔(dān)心JavaScript被殺死的許多人是個(gè)好消息,。實(shí)際上,這是我在互聯(lián)網(wǎng)上看到的對(duì)wasm聲明最多的反應(yīng),,人們害怕天正在塌下來(lái),。我想我們可以說(shuō)天沒(méi)有塌下來(lái), JavaScript仍然會(huì)堅(jiān)守一段時(shí)間。

      BE: 我認(rèn)為即使JavaScript有特權(quán)地位,,wasm真正能夠開(kāi)始作為類似于C++等靜態(tài)語(yǔ)言的目標(biāo),,我們?cè)谖磥?lái)將垃圾回收、JIT編譯等擴(kuò)展功能放入wasm中還需要一段時(shí)間,,動(dòng)態(tài)語(yǔ)言執(zhí)行良好所需要的一些特性也還需要一段時(shí)間,。

    與此同時(shí),Google里的成員正在做Dart編譯器,,他們就是在堅(jiān)守JavaScript,,因?yàn)楫?dāng)你不是在checked模式下編譯時(shí),,Dart代碼就是真正的動(dòng)態(tài)代碼-它需要JavaScript的JITs (Just In Time即時(shí)編譯),它需要多種形式的內(nèi)聯(lián)緩存以及其他優(yōu)化,。 

    理論上,, 我們會(huì)將Dart中的大整數(shù)/大數(shù)放入JavaScript,這是在未來(lái)的ECMAScript的日程中,。我認(rèn)為JavaScript將長(zhǎng)期存在,。真的很難說(shuō)在哪一個(gè)點(diǎn)上我們會(huì)在瀏覽器中放棄內(nèi)嵌的JavaScript,而只使用內(nèi)嵌高級(jí)語(yǔ)言,。 


      EE: 回到上世紀(jì)90年代,,我自己寫(xiě)了大量的C/C++代碼。我是在demoscene環(huán)境中長(zhǎng)大的,,我不知道你是否熟悉,,但我們基本上是在構(gòu)建藝術(shù)型應(yīng)用,類似于依靠實(shí)際代碼運(yùn)行而不是事先錄制好視頻的電影,。我們不再使用匯編語(yǔ)言來(lái)做視頻處理,,或處理大量數(shù)據(jù)等工作。你是將wasm視為人們構(gòu)建這些應(yīng)用的有效工具嗎,?

    (譯者注:Demoscene 是一種計(jì)算機(jī)亞文化,,高手們通過(guò)編程展現(xiàn)出炫麗的實(shí)時(shí)動(dòng)畫(huà)音樂(lè)場(chǎng)景。主要技術(shù)是實(shí)時(shí)計(jì)算機(jī)圖形學(xué),。)

     BE: 是的。應(yīng)當(dāng)指出JavaScript將有SIMD,。回到10年前Mozilla公司的Vladimir Vuki?evi? 最早開(kāi)始做的WebGL,,然后進(jìn)入到Khronos Group行業(yè)協(xié)會(huì),WebGL作為基礎(chǔ)的一部分可以支持大型游戲公司Epic, Unity等等的業(yè)務(wù),,這真的是太棒了,。

     但那只是基于OpenGL ES, OpenGL的移動(dòng)profile。在WebGL 2中那只是從OpenGL ES2提升到3,,所以你看看桌面GPUs, 它們可以做更多的事情,。Wasm將會(huì)用OpenGL 4,最新的,,最棒的桌面,,有很炫的額外陰影,瞄向所有令人瘋狂的Nvidia GPUs,。

    這些GPUs未來(lái)可能會(huì)慢慢進(jìn)入移動(dòng)設(shè)備,,但這會(huì)花很長(zhǎng)時(shí)間。不論WebGL發(fā)生什么,,接下來(lái)幾年我們對(duì)于wasm有一個(gè)選擇,, 就是要能夠更快的編程,包括那些高級(jí)GPUs.


    EE: 誰(shuí)在做這件事? 我知道你已經(jīng)在你的博客中提到有來(lái)自Microsoft和Google的員工在工作,都有誰(shuí)在做,,我們能夠看到的支持來(lái)自哪里?

    BE: 對(duì)我來(lái)說(shuō)這很難,,因?yàn)槲沂前l(fā)布了聲明,但我不屬于其他公司,,你可能已經(jīng)注意到,,公司不能將其名稱租借出去,但這通常是由于協(xié)議延遲,。這沒(méi)什么困難,,主角就是從事WebKit, JavaScriptCore的人們, Filip Pizlo這個(gè)名字在GitHub庫(kù)中非?;钴S(WebAssembly GitHub賬號(hào)),。

    Filip為Apple工作。其他公司還有Microsoft, Mozilla, 和Google,。

    Mozilla利用ASM.js走在前列,,Google的成員們利用PNaCl,都在解決大量的相同問(wèn)題和不確定行為,,思考ASM.js當(dāng)前還不支持的更高級(jí)特性,,例如在做共享數(shù)組buffer之前需要實(shí)現(xiàn)動(dòng)態(tài)鏈接和線程。

    我認(rèn)為在某個(gè)時(shí)間點(diǎn)上可以解決這些問(wèn)題,。我認(rèn)為在Hacker News上許多人認(rèn)為我是個(gè)超級(jí)極客(big jerk),, 因?yàn)椴恢趺椿厥拢瑥奈以贛ozilla的骷髏王冠開(kāi)始,, 我就極力從思想上控制業(yè)界的每個(gè)人阻止PNaCl進(jìn)入其他瀏覽器,,或者說(shuō)如果我只是將它放在Mozilla (以非常大的代價(jià)) 那么其他人就會(huì)跟隨,因?yàn)槿绻鸐ozilla和Google做某件事,,那么其他人也必須做這件事,。 不是這樣的,可看看WebM,。

    (譯者注:WebM項(xiàng)目是一個(gè)使用BSD許可證的開(kāi)源項(xiàng)目,。它采用了On2 Technologies開(kāi)發(fā)的VP8及其后續(xù)版本VP9視頻編解碼器和Xiph.Org基金會(huì)開(kāi)發(fā)的Vorbis音頻編解碼器,使用的封裝格式則以Matroska格式為基礎(chǔ),。WebM項(xiàng)目是在2010年的Google I/O會(huì)議上發(fā)布的,,之后宣布將會(huì)支持WebM的廠商有Mozilla、Opera和Google等,。但WebM與H.264之間存在激烈的競(jìng)爭(zhēng),。)

      所以我認(rèn)為那些不面對(duì)現(xiàn)實(shí)的人們有許多抱怨。事實(shí)是PNaCl不會(huì)跨瀏覽器,,但許多工作是基于LLVM的,。在我們做ASM.js之前PNaCl就已經(jīng)開(kāi)始了,,所以這是相當(dāng)完美的聯(lián)姻。最初還認(rèn)為是多災(zāi)多難,,但實(shí)際上它已經(jīng)讓之前從事ASM.js和PNaCl的人們轉(zhuǎn)向從事WebAssembly工作,。


     EE: 假定大家都支持這件事, 那么什么時(shí)候我們可以看到瀏覽器內(nèi)嵌支持wasm呢?

     BE: 我不清楚。他們必須建立一個(gè)原型或者可以繼續(xù)發(fā)展的某項(xiàng)工作,,因?yàn)槲覀儚腏avaScript和HTML學(xué)習(xí)到的一件事就是,,不要做大量的硬版本(hard version)。你可以通過(guò)對(duì)象檢測(cè),,特性檢測(cè)等工作來(lái)檢驗(yàn)自己的想法,,或使用一些自動(dòng)化配置測(cè)試工具,編寫(xiě)防御性的代碼使得退回去更優(yōu)雅一些,。

    所以在幾年之后,,當(dāng)wasm 2018內(nèi)部包含了call/cc, 可能一些其他語(yǔ)言就運(yùn)氣不佳,但如果它也有諸如零花費(fèi)異常等高級(jí)特性,,那你就可能想要在瀏覽器中利用不帶零花費(fèi)異常功能的wasm 2017運(yùn)行,,盡管可能你會(huì)遭受到異常調(diào)用的嚴(yán)重影響。但這也許可以,。

    從JavaScript編程來(lái)講有一些非常重要,,在8年前使用ES4時(shí)我們已經(jīng)將mimetype versioning戲稱為1JS. 在RFC 4329中,Bjoern Hoehrmann將JavaScript寫(xiě)為`<script type=”application/ecmascript”>` ,。他說(shuō)有一個(gè)version參數(shù),,但沒(méi)有說(shuō)version有哪些值, (但不能忽略這個(gè)參數(shù)),,于是人們總是得到錯(cuò)誤的versions,,錯(cuò)誤的mimetypes或沒(méi)有任何mimetype的script標(biāo)簽。

    version locking的整個(gè)思路是失敗的,, 而且我認(rèn)為在其他runtime系統(tǒng)中使用它通常就是個(gè)問(wèn)題,。在接下來(lái)幾個(gè)月里,,我期望他們可以對(duì)抽象語(yǔ)法樹(shù)編碼性能感到滿意,,權(quán)衡編碼與解碼效率,這里解碼是最重要的,。他們對(duì)如何擴(kuò)展語(yǔ)法會(huì)有好的想法,。

     接下來(lái),他們可以開(kāi)始每天晚上運(yùn)行,。我期望某個(gè)時(shí)間點(diǎn) —?我想是到明年 — 但這完全是個(gè)猜測(cè),,我沒(méi)有可透視未來(lái)的魔幻水晶球。但我們將會(huì)開(kāi)始看到,,支持wasm的瀏覽器至少每天晚上都會(huì)運(yùn)行,,也可能會(huì)在這個(gè)秋季實(shí)現(xiàn),。

    社團(tuán)人們將很快開(kāi)始考慮語(yǔ)法的標(biāo)準(zhǔn)化。有一件事使得這件很緊迫的工作顯得不那么緊迫,,那就是已經(jīng)有一個(gè)polyfill?—?實(shí)際上就是一個(gè)庫(kù)—?一個(gè)JavaScript版本的解碼器,,這個(gè)解碼器可以將二進(jìn)制代碼變回到ASM.js, 可作為抽象語(yǔ)法樹(shù)的原型,。

    即使現(xiàn)在JavaScript已經(jīng)有軟件實(shí)現(xiàn)的wasm,,但不必提交成為正式的語(yǔ)法。在現(xiàn)代HTML5時(shí)代,,web標(biāo)準(zhǔn)的關(guān)鍵是不斷迭代,,不要去做一些宏大的10年的規(guī)范,希望事情馬上就塵埃落定,,就像ES4曾經(jīng)做過(guò)大的重構(gòu), ES6也是有大量變化,,唯一拯救它的就是在真正的引擎中做增量式原型。

    HTML5就是一個(gè)龐大,、多年的version,,最終打了一個(gè)巨大的版本戳5,但實(shí)際上在任何人聲稱已經(jīng)完成之前又過(guò)去了很多年,。


     EE: 你剛才提到了一個(gè)原型, 那現(xiàn)在是否可以下載,,試用?

     BE: 可以的,。如果通過(guò)GitHub賬號(hào)登錄,,訪問(wèn)WebAssembly,可以在polyfill-prototype-1下看到一個(gè)解碼器,。我還沒(méi)有時(shí)間,,但如果你看看Emscripten,Emscripten將通過(guò)一個(gè)可選的模式來(lái)使用這個(gè)polyfill,,即JavaScript解碼器的庫(kù),。我想現(xiàn)在可以試驗(yàn)下。

 

     EE: 所有這些都會(huì)融入到wasm,,那么會(huì)像在你的談話"Taking the High Road and the Low Road"中所說(shuō)的那樣,,JavaScript中還會(huì)增加一些底層特性嗎? 

     BE: 是的,,就像我說(shuō)的那樣,,wasm會(huì)沿著支持道路走下去,不再需要polyfill,,那么就會(huì)比ASM.js有更多的表達(dá)力,,它會(huì)有更強(qiáng)大的語(yǔ)義,但這還需要一段時(shí)間,。

    同時(shí)許多人還會(huì)深入學(xué)習(xí)JavaScript,,因?yàn)槿藗冃枰?,即使它不能被編譯,人們希望可以手工編碼,。同時(shí),,SIMD,以及l(fā)ibm中的一些功能,,例如`Math`對(duì)象,、內(nèi)聯(lián)函數(shù)都被提升到高層語(yǔ)言中。如果你曾經(jīng)編寫(xiě)過(guò)C或C++代碼,,你會(huì)看到有許多功能已經(jīng)增加到ES6中,,還有更多的功能已經(jīng)在排在日程上。 

    我認(rèn)為我們將仍然是既要走底層道路,,同時(shí)也要走高層道路,,但我認(rèn)為這可能是按5年時(shí)間來(lái)算,現(xiàn)在還不需要太擔(dān)心,,如果有一些底層功能只用于編譯器,,并且可以確信JavaScript手工編程人員不需要,那么就不會(huì)增加該功能到JavaScript中,,即不需要服務(wù)于兩個(gè)主人,。 


     EE: 你認(rèn)為這會(huì)導(dǎo)致大量語(yǔ)言被碎片化,或者說(shuō)差異化(diversity),,區(qū)別是什么? 這是件好事還是壞事? 許多人好像很困惑,。 

     BE: 我認(rèn)為JavaScript已經(jīng)成為瀏覽器中唯一的動(dòng)態(tài)語(yǔ)言,但wasm可以支持許多編譯語(yǔ)言,,也就是靜態(tài)語(yǔ)言—尤其是使用LLVM的語(yǔ)言,。微軟有自己的編譯器,所以他們會(huì)通過(guò)另一個(gè)編譯器框架支持wasm,,但這非常棒,。越多越好。 

     當(dāng)然,,GCC或類似的編譯器都可以生成wasm,,但我認(rèn)為動(dòng)態(tài)語(yǔ)言,例如Dart, Ruby, python, 甚至JavaScript?—?都會(huì)需要我前面提到的一些擴(kuò)展, 例如垃圾回收鉤子,、JIT支持等等,,否則它們將沒(méi)有競(jìng)爭(zhēng)力,。 

     有好的先例,,JVM經(jīng)過(guò)多年的成長(zhǎng),感謝John Rose加入了類似于`invokedynamic` 以及其他鉤子用于JIT編譯優(yōu)化,,,例如多種形式的內(nèi)聯(lián)緩存, 所以JVM實(shí)際上是一個(gè)可信賴的動(dòng)態(tài)語(yǔ)言平臺(tái),。 

     所有這些運(yùn)行時(shí)(runtime)都已經(jīng)變成了通曉多種語(yǔ)言的虛擬機(jī)—JavaScript VMs. Java還沒(méi)有死,,就是因?yàn)镴VM現(xiàn)在支持Clojure, Scala以及其他語(yǔ)言。我們幾乎是在編程語(yǔ)言的第二個(gè)黃金年代,,你知道,,現(xiàn)在有Rust, Haskell, Idris, 以及其他語(yǔ)言。 

     我想說(shuō)的是越多越好. 那不會(huì)成為巴別塔(the tower of Babel),,因?yàn)槲艺J(rèn)為不論是現(xiàn)在和未來(lái),,JavaScript都將成為瀏覽器的通用語(yǔ)言(the lingua franca of the browser)。如果你正在編寫(xiě)前端代碼,,或者當(dāng)你描繪輪廓時(shí)非關(guān)鍵路徑上做的其他事情,。

     但如果你真的想把這些映射為3d游戲, 或者一些超級(jí)復(fù)雜的計(jì)算機(jī)視覺(jué)內(nèi)核算法, 那么你可能要用C++或其他語(yǔ)言編譯成wasm, 也許5年后, 如果人們對(duì)可編譯為wasm的語(yǔ)言充滿熱情, 那么這門語(yǔ)言地位就會(huì)上升, 我認(rèn)為這不是個(gè)問(wèn)題, 這只是大都市生活的一部分. 


     EE: 也就是說(shuō)你最終想要看到的是JavaScript語(yǔ)言消失, 如果有更好的語(yǔ)言出現(xiàn)的話? 

     BE: 再重復(fù)一遍,我沒(méi)有預(yù)測(cè)它會(huì)如何被殺死,,因?yàn)閣eb上所有的內(nèi)容都必須在瀏覽器內(nèi)運(yùn)行,,wasm中實(shí)現(xiàn)一個(gè)能夠像V8那樣快速運(yùn)行的JavaScript runtime將是對(duì)工程師的一個(gè)真正挑戰(zhàn)。但沿著這條路走下去,,如果過(guò)了很多年某個(gè)人做到了,,那么就可以讓JavaScript成為n個(gè)wasm實(shí)現(xiàn)語(yǔ)言的一種。

     但JavaScript語(yǔ)言在web中仍然有神奇的立足點(diǎn),。而且它還在不斷發(fā)展,,因?yàn)槲覀內(nèi)匀辉谂κ笿avaScript成為手工編碼人員更好的語(yǔ)言,所以它不會(huì)停滯不前,。人們對(duì)ES6的評(píng)價(jià)是:這不是之前的JavaScript了,,現(xiàn)在非常棒。

     再次,,沒(méi)有可透視未來(lái)的魔幻水晶球,,我只是認(rèn)為很難讓JavaScript語(yǔ)言消失。我不會(huì)去殺死JavaScript語(yǔ)言,。當(dāng)人們不再需要JavaScript時(shí),,其壽命自然會(huì)終止,如果人們發(fā)現(xiàn)其他語(yǔ)言更好,,如果繼續(xù)沿著這條路走, 經(jīng)過(guò)許多次的更新迭代, 人們不擔(dān)心嵌入到瀏覽器中的是JavaScript語(yǔ)言, 那么我會(huì)說(shuō)“que sera sera.”(法語(yǔ): 該來(lái)的總會(huì)來(lái))

     我認(rèn)為, 那些想讓JavaScript語(yǔ)言消失的人是因?yàn)樗麄儗?duì)它由于某些原因而抱有敵意, 他們將會(huì)失望而歸,,JavaScript語(yǔ)言不會(huì)消失。

     這對(duì)于JavaScript和其他語(yǔ)言來(lái)說(shuō)實(shí)際上是件好事,。不要假設(shè)時(shí)間會(huì)停滯,,我認(rèn)為wasm將會(huì)包含越來(lái)越多其他語(yǔ)言的特性,也包括JavaScript語(yǔ)言的特性,。 

     這是各方都能夠贏的實(shí)例,,這確實(shí)滿足了web業(yè)界每一家的利益, 無(wú)論是Apple, Google, Microsoft, 還是Mozilla。

     現(xiàn)在要做的是聚焦增量式提升,,而不是偏離現(xiàn)實(shí)太遠(yuǎn),。類似于ES4, PNaCl, Dart, XHTML的工作都將回退到以往的日子,。所有那些試圖以自己公司宏大計(jì)劃模式來(lái)重建web的大碰撞將不會(huì)再起作用。

     所以現(xiàn)在我們這些人一起合作,,解決這些小的碰撞,,我們應(yīng)當(dāng)會(huì)看到一系列的小碰撞將會(huì)產(chǎn)生非常大的累積效果。


 譯者注:最后附上一頁(yè)Brendan Eich在Modern Web 2015會(huì)議上的主旨演講-JavaScript at 20 Years視頻中的最后一頁(yè),,Alaways bet on JS(永遠(yuǎn)賭JS贏):

    

[1] WebAssembly系列1-從 ASM.JS 到 WebAssembly, http://my.oschina.net/1pei/blog/487683

[2] Why we Need WebAssembly, An Interview with Brendan Eich, Eric Elliott, June 17th, 2015, https:///javascript-scene/why-we-need-webassembly-an-interview-with-brendan-eich-7fb2a60b0723 

[3] What is WebAssembly? The Dawn of a New Era, Eric Elliott, June 18th, 2015, https:///javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6

[4] Modern Web 2015, May 15th-16th, 2015, http:///program.html

[5] WebGL 2 Specification, Editor's Draft 24 July 2015, https://www./registry/webgl/specs/latest/2.0/

關(guān)鍵詞:Microsoft Community 大型游戲 Google 垃圾回收

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多