Skip to content

Conversation

alexcrichton
Copy link
Member

This commit goes through a few component model intrinsics and
synchronizes them with the current specification, mainly centered around
async intrinsics. This doesn't synchronize all of them but is at least a
start. Changes here include:

  • Support for resource.drop async intrinsics.
  • Renaming task.backpressure to backpressure.set.
  • Adding canonical ABI options to task.return.
  • A number of refactorings to simplify some constructs, reduce
    duplication, etc.

The validation of task.return has been updated to take
WebAssembly/component-model#453 into account with the new set of options
that are allowed on it. Additionally wit-component was updated to set
options for task.return in the same manner as the canon lift'd
function on the other end.

@alexcrichton alexcrichton requested a review from dicej February 22, 2025 00:38
@alexcrichton
Copy link
Member Author

I'll note that this is based on #2064, so only the last commit is exclusive to the PR (at this time)

This commit goes through a few component model intrinsics and
synchronizes them with the current specification, mainly centered around
async intrinsics. This doesn't synchronize all of them but is at least a
start. Changes here include:

* Support for `resource.drop async` intrinsics.
* Renaming `task.backpressure` to `backpressure.set`.
* Adding canonical ABI options to `task.return`.
* A number of refactorings to simplify some constructs, reduce
  duplication, etc.

The validation of `task.return` has been updated to take
WebAssembly/component-model#453 into account with the new set of options
that are allowed on it. Additionally `wit-component` was updated to set
options for `task.return` in the same manner as the `canon lift`'d
function on the other end.
@alexcrichton alexcrichton force-pushed the fix-some-component-intrinsics branch from 49f1bfe to 0a76357 Compare February 24, 2025 18:38
@alexcrichton alexcrichton added this pull request to the merge queue Feb 24, 2025
Merged via the queue into bytecodealliance:main with commit a4b41c6 Feb 24, 2025
31 checks passed
@alexcrichton alexcrichton deleted the fix-some-component-intrinsics branch February 24, 2025 18:50
alexcrichton added a commit to alexcrichton/wasm-tools that referenced this pull request Feb 25, 2025
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.
alexcrichton added a commit to alexcrichton/wasm-tools that referenced this pull request Feb 25, 2025
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.
alexcrichton added a commit to alexcrichton/wasm-tools that referenced this pull request Feb 27, 2025
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.
github-merge-queue bot pushed a commit that referenced this pull request Feb 27, 2025
* Force using `sync` resource-drop during fuzzing

This commit fixes fuzzer fallout from #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
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