近日 Oracle 開源了其在 GraalVM 中實(shí)現(xiàn)的 WebAssembly 引擎 GraalWasm,開發(fā)團(tuán)隊(duì)介紹,GraalWasm 當(dāng)前實(shí)現(xiàn)了 WebAssembly MVP(最小可行產(chǎn)品)規(guī)范,并且可以以二進(jìn)制格式運(yùn)行 WebAssembly 程序,該程序是由諸如 Emscripten 之類的編譯器后端生成的。
支持 WebAssembly 擴(kuò)展了 GraalVM 與其它支持的語言一起執(zhí)行的能力,進(jìn)一步有望使其成為通用編程語言執(zhí)行平臺(tái)。不過目前 GraalWasm 還是一個(gè)非常早期的實(shí)現(xiàn),并且處于實(shí)驗(yàn)?zāi)J健?/p>

為了實(shí)現(xiàn) GraalWasm,開發(fā)團(tuán)隊(duì)使用 GraalVM 作為提供有效局部評(píng)估引擎的平臺(tái),使用 GraalVM 的 Truffle API,首先實(shí)現(xiàn)了 WebAssembly 二進(jìn)制文件的解釋器。
WebAssembly 的半結(jié)構(gòu)化格式能夠輕松地恢復(fù)程序的控制流結(jié)構(gòu),從而使存儲(chǔ)代碼的內(nèi)存數(shù)據(jù)結(jié)構(gòu)可以表示為 AST。用 AST 表示的程序的解釋器可以用非常簡單的方式編寫,但是,盡管基于 AST 的數(shù)據(jù)結(jié)構(gòu)更易于檢查和操作,但它們確實(shí)存在引入額外內(nèi)存開銷的缺點(diǎn)。
另一方面,基于位碼的代碼表示不需要為每個(gè)基本指令實(shí)例化樹節(jié)點(diǎn),這就是基于位碼的 GraalVM 解釋器通常具有更小的內(nèi)存占用的原因。
由于每個(gè) WebAssembly 塊僅包含線性指令序列,因此 GraalWasm 能夠結(jié)合兩種解釋器方法中的最佳方法:AST 疊加在 WebAssembly 的控制流指令之上,如 if 和 loop。但是每個(gè)塊都用一個(gè) Truffle AST 節(jié)點(diǎn),稱之為 Wasm 塊節(jié)點(diǎn),這減少了內(nèi)存占用,因?yàn)槊總€(gè)塊中的單個(gè)指令不需要單獨(dú)的節(jié)點(diǎn)對(duì)象。
此外,GraalWasm 塊節(jié)點(diǎn)不會(huì)復(fù)制原始指令流的各個(gè)部分,而是僅將指針包含在 WebAssembly 二進(jìn)制文件的字節(jié)數(shù)組中。

文本 WebAssembly、二進(jìn)制 WebAssembly 與 GraalWasm AST 之間的對(duì)應(yīng)關(guān)系
在此數(shù)據(jù)結(jié)構(gòu)之上實(shí)現(xiàn)的解釋器是基于 AST 的解釋器和基于位碼的解釋器之間的混合體。在較高的控制流級(jí)別上,它在適當(dāng)?shù)幕緣K之間分配。在每個(gè)基本塊中,解釋器在迭代該基本塊的操作碼的解釋循環(huán)內(nèi)完成。這種設(shè)計(jì)使轉(zhuǎn)譯更容易理解,并簡化了部分評(píng)估。
運(yùn)行時(shí),解釋器和程序?qū)鬟f到 Truffle 的局部評(píng)估引擎,然后該引擎將解釋器專門用于程序,并將專門的代碼傳遞給 GraalVM 編譯器,最終為目標(biāo)平臺(tái)生成高效的匯編代碼。
關(guān)于 GraalWasm 的更多技術(shù)細(xì)節(jié)可以查看官方博客:
https://medium.com/graalvm/announcing-graalwasm-a-webassembly-engine-in-graalvm-25cd0400a7f2開發(fā)團(tuán)隊(duì)還介紹了項(xiàng)目接下來的發(fā)展規(guī)劃,其表示,GraalWasm 的動(dòng)機(jī)之一是擴(kuò)展 GraalVM 的 node.js 實(shí)現(xiàn)支持的 API 集,WebAssembly 支持的增加將使其能夠?qū)崿F(xiàn)加載 WebAssembly 二進(jìn)制文件的 V8 兼容 API 功能。
下一步將是實(shí)現(xiàn) WebAssembly 系統(tǒng)接口(WASI),這對(duì)于在 Web 上下文外部運(yùn)行 WebAssembly 程序是必需的。WASI 是一組 API,用于抽象化對(duì)各種操作系統(tǒng)功能的訪問,例如文件 API、網(wǎng)絡(luò)套接字和時(shí)鐘。
同時(shí) GraalWasm 將專注于提高性能,初步實(shí)驗(yàn)和對(duì)多個(gè) C 微基準(zhǔn)的性能調(diào)整表明,與以最高優(yōu)化水平進(jìn)行編譯的本地 GCC 二進(jìn)制文件相比,GraalWasm 當(dāng)前可實(shí)現(xiàn)約 0.5 倍至 0.75 倍的峰值性能。
另一方面是改善 GraalWasm 中的調(diào)試支持,并將其與 GraalVM 的其余部分集成。
特別提醒:本網(wǎng)內(nèi)容轉(zhuǎn)載自其他媒體,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。本站不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。如若本網(wǎng)有任何內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系我們,本站將會(huì)在24小時(shí)內(nèi)處理完畢。
相關(guān)推薦
- 華納云香港高防服務(wù)器150G防御4.6折促銷,低至6888元/月,CN2大帶寬直連清洗,終身循環(huán)折扣
- RakSmart服務(wù)器成本優(yōu)化策略
- raksmart法蘭克福云服務(wù)器延遲高嗎?
- 自媒體人搭建直播服務(wù)器使用raksmart優(yōu)化技巧
- 華納云高防服務(wù)器3.6折起低至1188元/月,企業(yè)級(jí)真實(shí)防御20G`T級(jí),自營機(jī)房一手服務(wù)器資源
- 選擇站群VPS時(shí)必須關(guān)注的六大核心需求
- RakSmart法蘭克福數(shù)據(jù)中心優(yōu)勢(shì)與適用場(chǎng)景
- 從入門到精通,一文搞懂vps云服務(wù)器配置怎么選擇!