wasmtime-wasi: Split a new IoView trait off of WasiView#10016
wasmtime-wasi: Split a new IoView trait off of WasiView#10016alexcrichton merged 7 commits intomainfrom
IoView trait off of WasiView#10016Conversation
413dd23 to
afb6228
Compare
| } | ||
| } | ||
|
|
||
| /// Per-[`Store`] state which holds state necessary to implement WASI from this |
There was a problem hiding this comment.
These docs are now appended to the ones above, so should these words move above the example perhaps?
There was a problem hiding this comment.
I made lots of fixes to the docs during the code motion for #10036 - can we put off the docs review and check it all over there?
| fn table(&mut self) -> &mut ResourceTable; | ||
| } | ||
|
|
||
| pub trait WasiView: IoView { |
There was a problem hiding this comment.
Could this retain some of the documentation from before as well? Ideally with an example or links to other examples throughout the crate.
| use crate::ctx::WasiCtx; | ||
| use wasmtime::component::ResourceTable; | ||
|
|
||
| pub trait IoView: Send { |
There was a problem hiding this comment.
To perhaps bikeshed a bit, maybe TableView?
There was a problem hiding this comment.
Also mind ensuring there's documentation for this trait as well? (similar to the WasiView one below)
There was a problem hiding this comment.
I named it Io instead of Table view in anticipation of factoring it out for the wasmtime-wasi-io crate. I don't mind renaming it, but thats why I was thinking Io over Table.
* Update wasmtime to v30 * Build fix for the latest wasmtime-wasi See bytecodealliance/wasmtime#10016
`IOView` is split off of `WasiView`. bytecodealliance/wasmtime#10016 `static_memory_maximum_size` is now `memory_reservation`. bytecodealliance/wasmtime#9545 `detect_precompiled` is now associated function. bytecodealliance/wasmtime#10405
`IOView` is split off of `WasiView`. bytecodealliance/wasmtime#10016 `static_memory_maximum_size` is now `memory_reservation`. bytecodealliance/wasmtime#9545 `detect_precompiled` is now associated function. bytecodealliance/wasmtime#10405 Moved WASIp2 related things to `wasmtime_wasi::p2` module. bytecodealliance/wasmtime#10073
`IOView` is split off of `WasiView`. bytecodealliance/wasmtime#10016 `static_memory_maximum_size` is now `memory_reservation`. bytecodealliance/wasmtime#9545 `detect_precompiled` is now associated function. bytecodealliance/wasmtime#10405 Moved WASIp2 related things to `wasmtime_wasi::p2` module. bytecodealliance/wasmtime#10073
`IOView` is split off of `WasiView`. bytecodealliance/wasmtime#10016 `static_memory_maximum_size` is now `memory_reservation`. bytecodealliance/wasmtime#9545 `detect_precompiled` is now associated function. bytecodealliance/wasmtime#10405 Moved WASIp2 related things to `wasmtime_wasi::p2` module. bytecodealliance/wasmtime#10073
This is mainly just to be on the latest version for the next release of Unit. This required some changes to the language module as described here <bytecodealliance/wasmtime#10016>. We also add unnecessary_transmutes to the list of allowed linters to quell warnings like warning: unnecessary transmute --> /home/andrew/src/unit/src/wasm-wasi-component/target/debug/build/wasm-wasi-component-9ae3c2c94201e6be/out/bindings.rs:440:13 | 440 | ... ::std::mem::transmute(self._bitfield_1.get(0usize, 24u8) as u32) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace this with: `u32::cast_signed(self._bitfield_1.get(0usize, 24u8) as u32)` | = note: `#[warn(unnecessary_transmutes)]` on by default Also, because this is new in rustc 1.88, to avoid warnings on older compilers the simplest thing is to just add unknown_lints to the list. Link: <https://lists.gnu.org/archive/html/qemu-rust/2025-07/msg00006.html> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
`IOView` is split off of `WasiView`. bytecodealliance/wasmtime#10016 `static_memory_maximum_size` is now `memory_reservation`. bytecodealliance/wasmtime#9545 `detect_precompiled` is now associated function. bytecodealliance/wasmtime#10405 Moved WASIp2 related things to `wasmtime_wasi::p2` module. bytecodealliance/wasmtime#10073
`IOView` is split off of `WasiView`. bytecodealliance/wasmtime#10016 `static_memory_maximum_size` is now `memory_reservation`. bytecodealliance/wasmtime#9545 `detect_precompiled` is now associated function. bytecodealliance/wasmtime#10405 Moved WASIp2 related things to `wasmtime_wasi::p2` module. bytecodealliance/wasmtime#10073
`IOView` is split off of `WasiView`. bytecodealliance/wasmtime#10016 `static_memory_maximum_size` is now `memory_reservation`. bytecodealliance/wasmtime#9545 `detect_precompiled` is now associated function. bytecodealliance/wasmtime#10405 Moved WASIp2 related things to `wasmtime_wasi::p2` module. bytecodealliance/wasmtime#10073
This PR prepares the wasi-io aspects of the wasmtime-wasi crate to be split off into its own independent crate, in order for the common base of wasi-io functionality to be reusable in a variety of host implementations which do not intend to reuse all of wasmtime-wasi.
Summary for users
You're an embedder using wasmtime-wasi, and maybe even wasmtime-wasi-http. You defined a struct like:
Prior to this PR, you'd hook your
MyCtxup to theWasiViewandWasiHttpViewtraits like:After this PR, you rewrite that to:
Thats it. For almost all users, you don't have to worry about anything else. All of the other aspects of
wasmtime_wasi{,_http}::add_to_linker_{sync,async}keep working exactly like before. Semantically, nothing changed. TheWasiViewandWasiHttpViewtraits grew a common implies on theIoViewtrait, i.e.trait WasiView: IoView {...},trait WasiHttpView: IoView {...}.More details
You probably don't care about these, unless you are doing low level linker stuff and probably can just read the source code to figure it out.
There's a new
IoImplstruct that the wasi-io Host trait impls, instead ofWasiImpl. LikeWasiImplthis struct is#[repr(transparent)]. Anytime you were constructing aWasiImpl(t), you now constructWasiImpl(IoImpl(t)), e.g. https://github.com/bytecodealliance/wasmtime/pull/10016/files#diff-a6ec073ba5d074b65f0bcbf8df48af2b126d65034398905bf74d8f10a5c5f8b6R288If you're using the wasmtime-wit-bindgen generated add_to_linker_ funcs directly, you'll need a variant on the
type_annotatehack to get rustc to infer IoView in the right places, e.g. https://github.com/bytecodealliance/wasmtime/pull/10016/files#diff-a6ec073ba5d074b65f0bcbf8df48af2b126d65034398905bf74d8f10a5c5f8b6R287.