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
每月 202 次下载
85KB
2K SLoC
pyodide-webassembly-runtime-layer
pyodide-webassembly-runtime-layer 实现了 wasm_runtime_layer 后端 API,通过 Pyodide 提供对浏览器 WebAssembly 运行时的访问。
此包的实现深受 js_wasm_runtime_layer 后端实现的影响,该实现用于 wasm_runtime_layer。该包不依赖于 js-sys 和 wasm-bindgen 包来生成 JavaScript 绑定以访问 WebAssembly JavaScript API,而是使用 Pyodide 的 js 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 License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://open-source.org.cn/licenses/MIT)
任选。
贡献
除非您明确声明,否则任何根据 Apache-2.0 许可证定义的,旨在包含在您的工作中的有意提交的贡献,都将按上述方式双重许可,不附加任何额外条款或条件。
资助
pyodide-webassembly-runtime-layer 已作为 ESiWACE3 的一部分开发,这是欧洲模拟天气和气候卓越中心的第三阶段。
由欧盟资助。这项工作已从欧洲高性能计算联合体(JU)获得资助,协议编号 No 101093054。
依赖关系
~7MB
~139K SLoC