Files
wasmtime/crates/wiggle
Alex Crichton 6dcdabf37e wiggle: Refactor with fewer raw pointers (#5268)
This commit refactors the internals of `wiggle` to have fewer raw pointers and more liberally use `&[UnsafeCell<_>]`. The purpose of this refactoring is to more strictly thread through lifetime information throughout the crate to avoid getting it wrong. Additionally storing `UnsafeCell<T>` at rest pushes the unsafety of access to the leaves of modifications where Rust safety guarantees are upheld. Finally this provides what I believe is a safer internal representation of `WasmtimeGuestMemory` since it technically holds onto `&mut [u8]` un-soundly as other `&mut T` pointers are handed out.

Additionally generated `GuestTypeTransparent` impls in the `wiggle` macro were removed because they are not safe for shared memories as-is and otherwise aren't needed for WASI today. The trait has been updated to indicate that all bit patterns must be valid in addition to having the same representation on the host as in the guest to accomodate this.
2022-11-15 11:11:47 -06:00
..
2021-01-07 11:45:11 -08:00

wiggle

Wiggle is a code generator for the host side of a witx interface. It is invoked as a Rust procedural macro.

Wiggle is not specialized to any particular WebAssembly runtime. It is usable in at least Wasmtime and Lucet.

Learning more

Read the docs on docs.rs.

There are child crates for integrating with Wasmtime and Lucet.

The wasi-common crate is implemented using Wiggle and the wasmtime-wasi crate integrates wasi-common with the Wasmtime engine.

Andrew Brown wrote a great blog post on using Wiggle with Wasmtime.