歡迎您光臨本站 註冊首頁

Oracle 開源 WebAssembly 引擎 GraalWasm

←手機掃碼閱讀     admin @ 2020-01-03 , reply:0

近日 Oracle 開源了其在 GraalVM 中實現的 WebAssembly 引擎 GraalWasm,開發團隊介紹,GraalWasm 當前實現了 WebAssembly MVP(最小可行產品)規範,並且可以以二進位格式運行 WebAssembly 程序,該程序是由諸如 Emscripten 之類的編譯器後端生成的。

支持 WebAssembly 擴展了 GraalVM 與其它支持的語言一起執行的能力,進一步有望使其成為通用編程語言執行平台。不過目前 GraalWasm 還是一個非常早期的實現,並且處於實驗模式。

為了實現 GraalWasm,開發團隊使用 GraalVM 作為提供有效局部評估引擎的平台,使用 GraalVM 的 Truffle API,首先實現了 WebAssembly 二進位文件的解釋器。

WebAssembly 的半結構化格式能夠輕鬆地恢復程序的控制流結構,從而使存儲代碼的內存數據結構可以表示為 AST。用 AST 表示的程序的解釋器可以用非常簡單的方式編寫,但是,儘管基於 AST 的數據結構更易於檢查和操作,但它們確實存在引入額外內存開銷的缺點。

另一方面,基於位碼的代碼表示不需要為每個基本指令實例化樹節點,這就是基於位碼的 GraalVM 解釋器通常具有更小的內存佔用的原因。

由於每個 WebAssembly 塊僅包含線性指令序列,因此 GraalWasm 能夠結合兩種解釋器方法中的最佳方法:AST 疊加在 WebAssembly 的控制流指令之上,如 if 和 loop。但是每個塊都用一個 Truffle AST 節點,稱之為 Wasm 塊節點,這減少了內存佔用,因為每個塊中的單個指令不需要單獨的節點對象。

此外,GraalWasm 塊節點不會複製原始指令流的各個部分,而是僅將指針包含在 WebAssembly 二進位文件的位元組數組中。

 

文本 WebAssembly、二進位 WebAssembly 與 GraalWasm AST 之間的對應關係

在此數據結構之上實現的解釋器是基於 AST 的解釋器和基於位碼的解釋器之間的混合體。在較高的控制流級別上,它在適當的基本塊之間分配。在每個基本塊中,解釋器在迭代該基本塊的操作碼的解釋循環內完成。這種設計使轉譯更容易理解,並簡化了部分評估。

運行時,解釋器和程序將傳遞到 Truffle 的局部評估引擎,然後該引擎將解釋器專門用於程序,並將專門的代碼傳遞給 GraalVM 編譯器,最終為目標平台生成高效的彙編代碼。

關於 GraalWasm 的更多技術細節可以查看官方博客:

開發團隊還介紹了項目接下來的發展規劃,其表示,GraalWasm 的動機之一是擴展 GraalVM 的 node.js 實現支持的 API 集,WebAssembly 支持的增加將使其能夠實現載入 WebAssembly 二進位文件的 V8 兼容 API 功能。

下一步將是實現 WebAssembly 系統介面(WASI),這對於在 Web 上下文外部運行 WebAssembly 程序是必需的。WASI 是一組 API,用於抽象化對各種操作系統功能的訪問,例如文件 API、網路套接字和時鐘。

同時 GraalWasm 將專註於提高性能,初步實驗和對多個 C 微基準的性能調整表明,與以最高優化水平進行編譯的本地 GCC 二進位文件相比,GraalWasm 當前可實現約 0.5 倍至 0.75 倍的峰值性能。

另一方面是改善 GraalWasm 中的調試支持,並將其與 GraalVM 的其餘部分集成。


[admin ]

來源:OsChina
連結:https://www.oschina.net/news/112519/announcing-graalwasm
Oracle 開源 WebAssembly 引擎 GraalWasm已經有130次圍觀

http://coctec.com/news/soft/show-post-221997.html