#wasi #webview #系统接口 #系统API #Web应用 #rust

wvwasi

具有 WASI 的 WebView 可能是最佳的 JS/WASM 运行时,而 wvwasi 就是它

4 个版本

0.2.0 2024 年 3 月 17 日
0.1.2 2023 年 7 月 10 日
0.1.1 2023 年 7 月 4 日
0.1.0 2023 年 7 月 4 日

#358WebAssembly

每月 21 次下载

MIT 许可证

94KB
2K SLoC

wvwasi

具有 WebAssembly 系统接口 (WASI) 的 WebView 可能是最佳的 Javascript/WebAssembly 运行时,而 wvwasi 就是它。

                              |
Javascript/WebAssembly code   |  Javascript/WebAssembly application code
                              |                 |
                              |                 v
                              | WASI syscalls (inserted by compiler toolchain)
                              |                 |
------------------------------+                 |
                              |                 v
Javascript/WebAssembly runtime|    wvwasi (implementation WASI in webview)
(WebView)                     |                 |
                              |                 v
                              |        platform-specific calls
                              |

(因此,wvwasi 不适用于在 WASI 运行时上执行程序。这可能是通过 rust 编译的 wasm32-wasi 目标,或者通过 Emscripten 或 wasi-sdk 工具链的 POSIX 仿真完成。)

警告:这是一个 alpha 版本。仍在开发中。

示例用法

目前仅实现了 Windows 平台,其他平台正在开发中。

cargo run --example hello_world --target x86_64-pc-windows-msvc

它是如何实现高性能的?

没有魔法,只是 IPC 和 sharedbuffer。

为什么不使用 Web APIs 实现 WASI?

  1. WebKit 反对文件系统访问 API.
  2. 无法预先打开系统文件夹。
  3. 您不能使用高性能通信机制自定义自己的接口。
  4. 您可以使用原生系统功能,例如传输层的套接字,而无需在应用层受限于 websockets。

API

WASI API 已进行了版本控制。本文档基于 WASI preview 1 快照。wvwasi 使用以下添加/修改实现了 WASI 系统调用 API

系统调用

本节内容来自官方 WASI API 文档。

依赖

~199MB
~3M SLoC