WasmEdge 0.9.1 釋出! 更好的 networking 支援與開發者體驗、安卓支援

2022-02-23 19:00:06

0.9.1 釋出了!此版本整合了高效能 networking、JavaScript 流式 SSR 和 Fetch API 支援、新的 bindgen 框架、安卓和 OpenHarmony 作業系統支援、擴充套件的 Kubernetes 支援以及改進的記憶體管理。

  • WebAssembly 擴充套件
  • 流式伺服器端渲染(SSR)函數
  • 安卓和 OpenHarmony
  • Kubernetes
  • 漏洞修復和效能提升

WebAssembly 擴充套件

WasmEdge 目標是支援所有標準和可選的標準 WebAssembly 擴充套件提案。WasmEdge 也支援對雲原生使用場景的非標準和試驗性擴充套件,例如 networking 和資料傳遞。

Rust 和 JavaScript 的高效能 networking

WasmEdge 從 0.8.2 版本開始就原生支援 。但是,使用同步 networking sockets,應用程式一次只能處理一個連線。因此高效能的 CPU 大部分時間處於空閒狀態,等待資料從 network 緩慢流入。

在 0.9.1 中,WasmEdge 通過在 Rust 和 JavaScript 應用程式中支援非阻塞 I/O ,從而顯著提高了 networking 效能。通過非阻塞 I/O,WasmEdge 程式可以一次開啟多個連線,並在接收到資料時非同步處理來自這些連線的資料。 同時,WasmEdge 為非阻塞 network I/O 提供了 Rust API 和 JavaScript API。

通過 JavaScript 中的非阻塞 network I/O,我們現在可以在 WasmEdge 中執行並使用 JavaScript Fetch API。 流式 SSR 和 Fetch 通常用於邊緣 serverless 函數。

WasmEdge-Bindgen

標準的 WebAssembly 規範僅支援一些開箱即用的簡單資料型別。它甚至不支援常見的資料型別,如字串和陣列。要將豐富的資料型別從 Host 應用程式傳遞給 WebAssembly 函數,我們需要 bindgen 解決方案來將複雜型別轉換為簡單型別。例如,一個 bindgen 解決方案可以將一個字串轉換為兩個整數:一個記憶體指標和一個長度。

在瀏覽器世界中,emscripten 工具鏈處理 JavaScript 呼叫基於 C 的 WebAssembly 函數;wasm-bindgen 工具鏈處理 JavaScript 呼叫基於 Rust 的 WebAssembly 函數。然而,它們都不能很好地在雲原生環境中的 WASI 應用程式工作。

因此,WasmEdge 團隊建立了 框架來支援 WASI 環境中的複雜引數。目前支援 Go host app 呼叫 Rust 編譯的 WebAssembly 函數。具體請檢視。

同時,我們也在開發 wasmedge-bindgen 對 Rust、C、JavaScript / Node.JS 和 Python host app 的支援。

Multi-memories 提案

WasmEdge 0.9.1 支援 multi-memories 。此擴充套件通過在單個 WebAssembly 模組中啟用多個記憶體,使 WebAssembly 執行更快(即更快地複製值)、更安全,且隔離更佳。

如果要啟用 multi-memories 提案,請在 wasmedgecwasmedge 工具中使用 --enable-multi-memory 命令列。

支援更多作業系統和裝置

除了基於 seL4 的嵌入式和實時裝置,WasmEdge 現在已被移植到更多的邊緣裝置平臺。 最大的邊緣裝置平臺是安卓,現在安卓已經完全支援 WasmEdge 0.9.1。

  • 在安卓平臺編譯和構建 WasmEdge 。