Stream: git-wasmtime

Topic: wasmtime / issue #9823 Bindgen improvement: Remove the us...


view this post on Zulip Wasmtime GitHub notifications bot (Dec 14 2024 at 15:40):

ifsheldon opened issue #9823:

Feature

Remove the use of async_trait in bindgen! as per https://github.com/bytecodealliance/wasmtime/issues/9776#issuecomment-2539971806. Use async fn in traits, RPITIT and trait_variant instead.

Benefit

Removing async_trait simplifies the generated code by bindgen! a lot. This can also drastically improve IDE experience as IDEs have better support for async fn in traits and RPITIT. Coding experience should be much better as well, as programmers can just use async fn when implementing autogenerated traits by bindgen in async mode.

Implementation

Note: I don't have time to dig into details now, so this issue is primary for tracking. Probably someone can tag this as "good first issue" :)

Just search for ::async_trait in the source code of wit-bindgen crate:

https://github.com/search?q=repo%3Abytecodealliance%2Fwasmtime+path%3A%2F%5Ecrates%5C%2Fwit-bindgen%5C%2F%2F+%3A%3Aasync_trait&type=code

There are not many occurrences to my surprise.

<img width="620" alt="image" src="https://github.com/user-attachments/assets/f940bf0b-3100-4069-9234-2f619394413a" />

In theory, we need to generate something like:

#[trait_variant::make(HostX: Send)]
pub trait LocalHostX {
//...
}

instead of

#[async_trait]
pub trait HostX {
//...
}

cc @alexcrichton

view this post on Zulip Wasmtime GitHub notifications bot (Dec 20 2024 at 17:12):

alexcrichton closed issue #9823:

Feature

Remove the use of async_trait in bindgen! as per https://github.com/bytecodealliance/wasmtime/issues/9776#issuecomment-2539971806. Use async fn in traits, RPITIT and trait_variant instead.

Benefit

Removing async_trait simplifies the generated code by bindgen! a lot. This can also drastically improve IDE experience as IDEs have better support for async fn in traits and RPITIT. Coding experience should be much better as well, as programmers can just use async fn when implementing autogenerated traits by bindgen in async mode.

Implementation

Note: I don't have time to dig into details now, so this issue is primary for tracking. Probably someone can tag this as "good first issue" :)

Just search for ::async_trait in the source code of wit-bindgen crate:

https://github.com/search?q=repo%3Abytecodealliance%2Fwasmtime+path%3A%2F%5Ecrates%5C%2Fwit-bindgen%5C%2F%2F+%3A%3Aasync_trait&type=code

There are not many occurrences to my surprise.

<img width="620" alt="image" src="https://github.com/user-attachments/assets/f940bf0b-3100-4069-9234-2f619394413a" />

In theory, we need to generate something like:

#[trait_variant::make(HostX: Send)]
pub trait LocalHostX {
//...
}

instead of

#[async_trait]
pub trait HostX {
//...
}

cc @alexcrichton


Last updated: Dec 23 2024 at 12:05 UTC