17 releases (4 breaking)
0.5.0 | Nov 20, 2024 |
---|---|
0.4.2 | Aug 29, 2024 |
0.4.1 | Jul 4, 2024 |
0.2.1 | Mar 14, 2024 |
#218 in WebAssembly
198 downloads per month
84KB
1.5K
SLoC
pyodide-webassembly-runtime-layer
pyodide-webassembly-runtime-layer
implements the wasm_runtime_layer
backend API to provide access to the web browser's WebAssembly
runtime using Pyodide
.
The implementation of this crate is heavily inspired by the js_wasm_runtime_layer
backend for the wasm_runtime_layer
. Instead of relying on the js-sys
and wasm-bindgen
crates to generate JavaScript-based bindings to the WebAssembly
JavaScript API, this crate uses Pyodide
's js
FFI layer to interact with WebAssembly
through Python running inside WebAssembly. pyodide-webassembly-runtime-layer
is therefore useful when developing a Python module in Rust, e.g. using PyO3
, which requires access to some WebAssembly runtime using the wasm_runtime_layer
API and may be deployed to the web itself using Pyodide
.
Memory Management
pyodide-webassembly-runtime-layer
generally tries to keep memory management intuitive by relying primarily on Python's reference counting to drop objects once they are no longer needed by both the user-written Rust code and the WebAssembly
runtime. As this crate coordinates interop across Rust, Python, and JavaScript, it takes extra care to avoid reference cycles across the different memory management strategies of the languages which would otherwise lead to memory leakage. If using this crate produces a memory leak that is avoided with a different wasm_runtime_layer
backend, please report it as a bug.
There is one exception to the intuitive memory management strategy:
Func::new
creates a host function, which may capture arbitrary data. To avoid cross-language reference cycles, it is stored usingwobbly
references inside theFunc
and its associatedStore
. Even though the host function and its data are dropped once either theStore
is dropped or references to theFunc
are dropped, additional bookkeeping data is required until both have been dropped.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Funding
pyodide-webassembly-runtime-layer
has been developed as part of ESiWACE3, the third phase of the Centre of Excellence in Simulation of Weather and Climate in Europe.
Funded by the European Union. This work has received funding from the European High Performance Computing Joint Undertaking (JU) under grant agreement No 101093054.
Dependencies
~6.5MB
~131K SLoC