-
Notifications
You must be signed in to change notification settings - Fork 297
Implement the WIT async keyword #2073
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This commit fixes fuzzer fallout from bytecodealliance#2065 and related PRs where previously async destructor imports were being generated but were actually bound with synchronous destructor imports. Now `wit-component` is generating an error on async resource destructors so this fixes the generator to avoid generating such imports for now while there's not support for lowering them.
This commit is an implementation of WebAssembly/component-model#442 in this repository, namely: * The `async` identifier is now a keyword in WIT. * Functions in WIT can be annotated `async`. * New kebab-names are now recognized to round-trip this attribute through the wasm binary format: * `[async]foo` => `foo: async func()` * `[async method]foo.bar` => `resource foo { bar: async func() }` * `[async static]foo.bar` => `resource foo { bar: static async func() }` * Various new tests were updated to ensure these names are gated behind the component-model-async feature and additionally test some validation of these names. * The `wit-component` convention of "name mangling" was updated to use `[async-lower]` instead of `[async]` for lowered functions (to not conflict with the kebab-name otherwise. Additionally in exports `[async-lift]` is used instead of `[async]` as well as `[async-lift-stackful]` instead of `[async-stackful]`. * Support was added to `wit-smith` to generate `async` functions.
eeb46df
to
62235db
Compare
dicej
approved these changes
Feb 27, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for doing this!
Merged
2 tasks
duffney
pushed a commit
to duffney/wasm-tools
that referenced
this pull request
Mar 4, 2025
* Force using `sync` resource-drop during fuzzing This commit fixes fuzzer fallout from bytecodealliance#2065 and related PRs where previously async destructor imports were being generated but were actually bound with synchronous destructor imports. Now `wit-component` is generating an error on async resource destructors so this fixes the generator to avoid generating such imports for now while there's not support for lowering them. * Implement the WIT `async` keyword This commit is an implementation of WebAssembly/component-model#442 in this repository, namely: * The `async` identifier is now a keyword in WIT. * Functions in WIT can be annotated `async`. * New kebab-names are now recognized to round-trip this attribute through the wasm binary format: * `[async]foo` => `foo: async func()` * `[async method]foo.bar` => `resource foo { bar: async func() }` * `[async static]foo.bar` => `resource foo { bar: static async func() }` * Various new tests were updated to ensure these names are gated behind the component-model-async feature and additionally test some validation of these names. * The `wit-component` convention of "name mangling" was updated to use `[async-lower]` instead of `[async]` for lowered functions (to not conflict with the kebab-name otherwise. Additionally in exports `[async-lift]` is used instead of `[async]` as well as `[async-lift-stackful]` instead of `[async-stackful]`. * Support was added to `wit-smith` to generate `async` functions. * Fix `Ord for ComponentNameKind` * Another `Ord`-related fix
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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 commit is an implementation of WebAssembly/component-model#442 in
this repository, namely:
async
identifier is now a keyword in WIT.async
.through the wasm binary format:
[async]foo
=>foo: async func()
[async method]foo.bar
=>resource foo { bar: async func() }
[async static]foo.bar
=>resource foo { bar: static async func() }
the component-model-async feature and additionally test some
validation of these names.
wit-component
convention of "name mangling" was updated to use[async-lower]
instead of[async]
for lowered functions (to notconflict with the kebab-name otherwise. Additionally in exports
[async-lift]
is used instead of[async]
as well as[async-lift-stackful]
instead of[async-stackful]
.wit-smith
to generateasync
functions.