Skip to content

Conversation

alexcrichton
Copy link
Member

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.

@alexcrichton
Copy link
Member Author

alexcrichton commented Feb 25, 2025

Note that the first few commits come from #2072, #2070, and #2069, so only the last commit here is the one in question for this PR

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.
Copy link
Collaborator

@dicej dicej left a 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!

@alexcrichton alexcrichton added this pull request to the merge queue Feb 27, 2025
Merged via the queue into bytecodealliance:main with commit 4e8c4c3 Feb 27, 2025
31 checks passed
@alexcrichton alexcrichton deleted the wit-async branch February 27, 2025 20:42
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
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants