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 或 http://opensource.org/licenses/MIT)
任选。
贡献
除非您明确声明,否则任何根据 Apache-2.0 许可证定义的,旨在包含在您的工作中的有意提交的贡献,都将按上述方式双重许可,不附加任何额外条款或条件。
资助
pyodide-webassembly-runtime-layer
已作为 ESiWACE3 的一部分开发,这是欧洲模拟天气和气候卓越中心的第三阶段。
由欧盟资助。这项工作已从欧洲高性能计算联合体(JU)获得资助,协议编号 No 101093054。
依赖关系
~7MB
~139K SLoC