dicej opened PR #9582 from dicej:async
to bytecodealliance:main
:
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [ ] Avoid exposing global task IDs to guests and use per-instance IDs instead
- [ ] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Minimize and/or document the use of unsafe code
- [ ] Add support for
(Typed)Func::call_concurrent
per the RFC- [ ] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and even polling
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej assigned dicej to PR #9582.
dicej updated PR #9582 (assigned to dicej).
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [ ] Avoid exposing global task IDs to guests and use per-instance IDs instead
- [ ] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Minimize and/or document the use of unsafe code
- [ ] Implement
{stream|future}.cancel-{read|write}
anderror-context.{new|debug-string}
- [ ] Add support for
(Typed)Func::call_concurrent
per the RFC- [ ] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and even polling
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [ ] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [ ] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Minimize and/or document the use of unsafe code
- [ ] Implement
{stream|future}.cancel-{read|write}
anderror-context.{new|debug-string}
- [ ] Add support for
(Typed)Func::call_concurrent
per the RFC- [ ] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and even polling
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [ ] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [ ] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Minimize and/or document the use of unsafe code
- [ ] Implement
{stream|future}.cancel-{read|write}
anderror-context.{new|debug-string}
- [ ] Add support for
(Typed)Func::call_concurrent
per the RFC- [ ] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and even polling
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Add doc and code comments to new, non-trivial code (especially concurrent.rs and futures_and_streams.rs)
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [ ] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [ ] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Minimize and/or document the use of unsafe code
- [ ] Implement
{stream|future}.cancel-{read|write}
anderror-context.{new|debug-string}
- [ ] Add support for
(Typed)Func::call_concurrent
per the RFC- [ ] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and event polling
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Add doc and code comments to new, non-trivial code (especially concurrent.rs and futures_and_streams.rs)
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [x] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [ ] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Minimize and/or document the use of unsafe code
- [ ] Implement
{stream|future}.cancel-{read|write}
anderror-context.{new|debug-string}
- [ ] Add support for
(Typed)Func::call_concurrent
per the RFC- [ ] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and event polling
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Add doc and code comments to new, non-trivial code (especially concurrent.rs and futures_and_streams.rs)
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej updated PR #9582 (assigned to dicej).
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [x] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [x] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Minimize and/or document the use of unsafe code
- [ ] Implement
{stream|future}.cancel-{read|write}
anderror-context.{new|debug-string}
- [ ] Add support for
(Typed)Func::call_concurrent
per the RFC- [ ] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and event polling
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Add doc and code comments to new, non-trivial code (especially concurrent.rs and futures_and_streams.rs)
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [x] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [x] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [ ] Implement
{stream|future}.cancel-{read|write}
anderror-context.{new|debug-string}
- [ ] Add support for
(Typed)Func::call_concurrent
per the RFC- [ ] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Add support and test coverage for dynamic APIs for async/streams/futures/error-contexts
- [ ] Add doc and code comments to new, non-trivial code (especially concurrent.rs and futures_and_streams.rs)
- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Minimize and/or document the use of unsafe code
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and event polling
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [x] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [x] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [ ] Implement
{stream|future}.cancel-{read|write}
anderror-context.{new|debug-string}
- [ ] Add support for
(Typed)Func::call_concurrent
per the RFC- [ ] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Add support and test coverage for dynamic APIs for async/streams/futures/error-contexts
- [ ] Add doc and code comments to new, non-trivial code (especially concurrent.rs and futures_and_streams.rs)
- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Call any post_return functions after lifting results during async->sync calls
- [ ] Minimize and/or document the use of unsafe code
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and event polling
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [x] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [x] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [ ] Implement
{stream|future}.cancel-{read|write}
anderror-context.{new|debug-string}
- [ ] Add support for
(Typed)Func::call_concurrent
per the RFC- [ ] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Add support and test coverage for dynamic APIs for async/streams/futures/error-contexts
- [ ] Add doc and code comments to new, non-trivial code (especially concurrent.rs and futures_and_streams.rs)
- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Call any post_return functions after lifting results
- [ ] Minimize and/or document the use of unsafe code
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and event polling
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej updated PR #9582 (assigned to dicej).
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [x] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [x] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [ ] Implement
{stream|future}.cancel-{read|write}
anderror-context.{new|debug-string}
- [x] Add support for
(Typed)Func::call_concurrent
per the RFC- [x] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Add support and test coverage for dynamic APIs for async/streams/futures/error-contexts
- [ ] Add doc and code comments to new, non-trivial code (especially concurrent.rs and futures_and_streams.rs)
- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Call any post_return functions after lifting results
- [ ] Minimize and/or document the use of unsafe code
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and event polling
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [x] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [x] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [x] Implement
{stream|future}.cancel-{read|write}
- [ ] Implement
error-context.{new|debug-string}
- [x] Add support for
(Typed)Func::call_concurrent
per the RFC- [x] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Add support and test coverage for dynamic APIs for async/streams/futures/error-contexts
- [ ] Add doc and code comments to new, non-trivial code (especially concurrent.rs and futures_and_streams.rs)
- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Call any post_return functions after lifting results
- [ ] Minimize and/or document the use of unsafe code
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and event polling
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [x] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [x] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [x] Implement
{stream|future}.cancel-{read|write}
- [x] Add support for
(Typed)Func::call_concurrent
per the RFC- [x] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [x] Add support for dynamic APIs for async/streams/futures/error-contexts
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add support and test coverage for callback-less async functions (e.g. goroutines)
- [ ] Add doc and code comments to new, non-trivial code (especially concurrent.rs and futures_and_streams.rs)
- [ ] Implement
error-context.{new|debug-string}
- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Call any post_return functions after lifting results
- [ ] Minimize and/or document the use of unsafe code
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and event polling
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej updated PR #9582 (assigned to dicej).
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [x] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [x] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [x] Implement
{stream|future}.cancel-{read|write}
- [x] Add support for
(Typed)Func::call_concurrent
per the RFC- [x] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [x] Add support for dynamic APIs for async/streams/futures/error-contexts
- [x] Add support for callback-less async functions (e.g. goroutines)
- [ ] Add integration test cases covering new functionality to tests/all/component_model (starting by porting over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add doc and code comments to new, non-trivial code (especially concurrent.rs and futures_and_streams.rs)
- [ ] Implement
error-context.{new|debug-string}
- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Call any post_return functions after lifting results
- [ ] Minimize and/or document the use of unsafe code
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and event polling
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Switch to back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej edited PR #9582 (assigned to dicej):
This adds support for loading, compiling, linking, and running components which use the Async ABI along with the
stream
,future
, anderror-context
types. It also adds support for generating host bindings such that multiple host functions can be run concurrently with guest tasks -- without monopolizing theStore
.See the implementation RFC for details, as well as this repo containing end-to-end smoke tests.
This is very much a work-in progress, with a number of tasks remaining:
- [x] Avoid exposing global task IDs to guests and use per-instance IDs instead (and fix no_std build at the same time)
- [x] Track
task.return
type during compilation and assert the actual and expected types match at runtime- [x] Implement
{stream|future}.cancel-{read|write}
- [x] Add support for
(Typed)Func::call_concurrent
per the RFC- [x] Add support for multiplexing stream/future reads/writes and concurrent calls to guest exports per the RFC
- [x] Add support for dynamic APIs for async/streams/futures/error-contexts
- [x] Add support for callback-less async functions (e.g. goroutines)
- [x] Add end-to-end tests covering new functionality (i.e. port over the tests in https://github.com/dicej/component-async-demo)
- [ ] Add WAT-based tests covering new functionality to tests/all/component_model
- [ ] Add binding generation test cases to crates/component-macro/tests
- [ ] Add WAST tests to tests/misc_testsuite/component-model
- [ ] Add doc and code comments to new, non-trivial code (especially concurrent.rs and futures_and_streams.rs)
- [ ] Implement
error-context.{new|debug-string}
- [ ] Ensure all guest pointers are bounds-checked when lifting, lowering, or copying values
- [ ] Guard against reentrance where required (e.g. in certain fused adapter calls)
- [ ] Call any post_return functions after lifting results
- [ ] Minimize and/or document the use of unsafe code
- [ ] Refactor, clean up, and unify handling of backpressure, yields, and event polling
- [ ] Reduce code duplication in
wasmtime_cranelift::compiler::component
- [ ] Reduce code duplication between
StoreContextMut::on_fiber
andconcurrent::on_fiber
- [ ] Switch back to upstream
wasm-tools
once https://github.com/bytecodealliance/wasm-tools/pull/1895 has been merged and released- [ ] Switch back to upstream
wit-bindgen
once https://github.com/bytecodealliance/wit-bindgen/pull/1082 has been merged and released
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
dicej updated PR #9582 (assigned to dicej).
Last updated: Dec 23 2024 at 12:05 UTC