What?
WebAssembly 是一種二進(jìn)制格式的類(lèi)匯編代碼,可以被瀏覽器加載和并進(jìn)一步編譯成可執(zhí)行的機(jī)器碼,從而在客戶端運(yùn)行。它還可以作為高級(jí)語(yǔ)言的編譯目標(biāo),理論上任何語(yǔ)言都可以編譯為 WebAssembly。
我們知道匯編語(yǔ)言就是機(jī)器碼的一種直譯版本,它是一套指令的集合,必須與特定機(jī)器匹配。WebAssembly 雖然也可以看成匯編代碼,但有一點(diǎn)不同,它是與特定機(jī)器無(wú)關(guān)的,它的指令被稱(chēng)為虛擬指令,并非真正的處理器指令。也就是說(shuō) WebAssembly 是一個(gè)平臺(tái)無(wú)關(guān)的通用編譯目標(biāo),可以運(yùn)行在各種設(shè)備上,包括手機(jī)和物聯(lián)網(wǎng)。
WebAssembly 起源于 Mozilla 的一個(gè)項(xiàng)目:ASM.js,這玩意兒簡(jiǎn)單的說(shuō)就是 JS 的一個(gè)輕簡(jiǎn)版子集,去除了動(dòng)態(tài)類(lèi)型、對(duì)象、垃圾回收等損耗性能的部件。它的作用是成為 C/C++ 的編譯目標(biāo),從而能將大中型游戲引入瀏覽器,事實(shí)證明效果不錯(cuò)。然而 ASM.js 畢竟仍然是 JS,它不具備原生代碼的一些功能,如 SIMD、線程、共享內(nèi)存等,因此 ASM.js 進(jìn)一步發(fā)展,就成了 WebAssembly。
WebAssembly 的實(shí)質(zhì)是 AST,而非字節(jié)碼(bytecode),使用 AST 的原因是因?yàn)?AST 比字節(jié)碼更容易壓縮,也更容易翻譯。
作為瀏覽器廠商四巨頭(谷歌、蘋(píng)果、火狐、微軟)合作共謀的產(chǎn)物,WebAssembly 的應(yīng)用前景不可小覷。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26