A reference type (aka externref
or anyref
) is an opaque reference made available to
a WASM module by the host environment. Such references cannot be forged in the WASM code
and can be associated with arbitrary host data, thus making them a good alternative to
ad-hoc handles (e.g., numeric ones). References cannot be stored in WASM linear memory; they are
confined to the stack and tables with externref
elements.
Rust does not support reference types natively; there is no way to produce an import / export
that has externref
as an argument or a return type. wasm-bindgen
patches WASM if
externref
s are enabled. This library strives to accomplish the same goal for generic
low-level WASM ABIs (wasm-bindgen
is specialized for browser hosts).
The project consists of the following crates:
externref
: The library providing more typesafeexternref
s for Rustexternref-macro
: Procedural macro for the libraryexternref-cli
: CLI app for WASM transforms based on the library
Experimental; it may be the case that the processor produces invalid WASM in some corner cases (please report this as an issue if it does).
All contributions are welcome! See the contributing guide to help you get involved.
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in externref
by you, as defined in the Apache-2.0 license,
shall be dual licensed as above, without any additional terms or conditions.