flesh out async support in wit-dylib
#2367
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This does two things:
First, it adds a low-level API to
wit-dylib-ffifor async imports and exports as an alternative to the high-level API based onwit-bindgen'srtlibrary and enabled with theasyncfeature. Thus enabling theasyncfeature now really just means "use the high-level API", while disabling it means "use the low-level API". The low-level API can make more sense for e.g. Python, where the coroutine model is different enough from Rust's that it's easier to map it directly to the component model ABI rather than try to plumb it through Rust's async APIs.Second, it populates the
wit_futureandwit_streamtypes with all the relevant intrinsics, ABI size/align metadata, and generated payload lift and lower functions.I've tested this all end-to-end with
componentize-py, but could use some guidance on how to add tests here as well.