#wasm-interface #run-time #python #web #browser #layer #pyodide

pyodide-webassembly-runtime-layer

Web 浏览器 WebAssembly 运行时的 WASM 运行时兼容性接口实现,通过 Pyodide 暴露

11 个不稳定版本 (3 个破坏性更新)

0.4.1 2024 年 7 月 4 日
0.4.0 2024 年 6 月 25 日
0.3.2 2024 年 7 月 4 日
0.3.1 2024 年 5 月 13 日
0.1.1 2024 年 3 月 14 日

#557 in WebAssembly

Download history 18/week @ 2024-04-13 11/week @ 2024-04-20 4/week @ 2024-04-27 1/week @ 2024-05-04 335/week @ 2024-05-11 34/week @ 2024-05-18 30/week @ 2024-05-25 20/week @ 2024-06-01 38/week @ 2024-06-08 22/week @ 2024-06-15 148/week @ 2024-06-22 249/week @ 2024-06-29 37/week @ 2024-07-06 22/week @ 2024-07-13 19/week @ 2024-07-20 52/week @ 2024-07-27

每月 202 次下载

MIT/Apache

85KB
2K SLoC

CI Status MSRV Latest Version Rust Doc Crate Rust Doc Main

pyodide-webassembly-runtime-layer

pyodide-webassembly-runtime-layer 实现了 wasm_runtime_layer 后端 API,通过 Pyodide 提供对浏览器 WebAssembly 运行时的访问。

此包的实现深受 js_wasm_runtime_layer 后端实现的影响,该实现用于 wasm_runtime_layer。该包不依赖于 js-syswasm-bindgen 包来生成 JavaScript 绑定以访问 WebAssembly JavaScript API,而是使用 Pyodidejs FFI 层来通过运行在 WebAssembly 内部的 Python 与 WebAssembly 交互。因此,当在 Rust 中开发需要使用 wasm_runtime_layer API 访问某些 WebAssembly 运行时并可能使用 Pyodide 在 Web 上部署的 Python 模块时,pyodide-webassembly-runtime-layer 非常有用,例如使用 PyO3

内存管理

pyodide-webassembly-runtime-layer 通常通过主要依靠 Python 的引用计数来降低对象,使内存管理直观,一旦用户编写的 Rust 代码和 WebAssembly 运行时不再需要。由于这个软件包协调 Rust、Python 和 JavaScript 之间的互操作性,它特别小心以避免不同语言的内存管理策略之间的引用循环,否则会导致内存泄漏。如果使用此软件包导致内存泄漏,而使用不同的 wasm_runtime_layer 后端可以避免泄漏,请 报告为错误

直观内存管理策略有一个例外

  • Func::new 创建了一个主机函数,它可能捕获任意数据。为了避免跨语言引用循环,它使用 wobbly 引用存储在 Func 和其关联的 Store 中。即使主机函数及其数据在 Store 被丢弃或对 Func 的引用被丢弃后都会被丢弃,但在两者都被丢弃之前仍需要额外的账簿数据。

许可证

根据您选择的以下任一项许可

任选。

贡献

除非您明确声明,否则任何根据 Apache-2.0 许可证定义的,旨在包含在您的工作中的有意提交的贡献,都将按上述方式双重许可,不附加任何额外条款或条件。

资助

pyodide-webassembly-runtime-layer 已作为 ESiWACE3 的一部分开发,这是欧洲模拟天气和气候卓越中心的第三阶段。

由欧盟资助。这项工作已从欧洲高性能计算联合体(JU)获得资助,协议编号 No 101093054。

依赖关系

~7MB
~139K SLoC