Skip to content
This repository was archived by the owner on Apr 16, 2025. It is now read-only.
This repository was archived by the owner on Apr 16, 2025. It is now read-only.

Async API #47

@Andoryuuta

Description

@Andoryuuta

Hello!

I'm trying to figure out the best way to wrap the async support that was added to the wasmtime C API. A good portion of this looks easy to wrap as methods in the existing C++ classes. However, I'm struggling to think of a good interface for wrapping the new functions that return call futures and require output pointers to live as long as the future itself.

In specific, these three functions:

WASM_API_EXTERN wasmtime_call_future_t *wasmtime_func_call_async(
    wasmtime_context_t *context, const wasmtime_func_t *func,
    const wasmtime_val_t *args, size_t nargs, wasmtime_val_t *results,
    size_t nresults, wasm_trap_t **trap_ret, wasmtime_error_t **error_ret);

WASM_API_EXTERN wasmtime_call_future_t *wasmtime_linker_instantiate_async(
    const wasmtime_linker_t *linker, wasmtime_context_t *store,
    const wasmtime_module_t *module, wasmtime_instance_t *instance,
    wasm_trap_t **trap_ret, wasmtime_error_t **error_ret);

WASM_API_EXTERN wasmtime_call_future_t *wasmtime_instance_pre_instantiate_async(
    const wasmtime_instance_pre_t *instance_pre, wasmtime_context_t *store,
    wasmtime_instance_t *instance, wasm_trap_t **trap_ret,
    wasmtime_error_t **error_ret);

In order to not require users of the wasmtime-cpp API to hold types from the C API, I think we will have to introduce a class for each of these calls holding the input/output parameters that need to be kept alive together.

Any thoughts/opinion regarding this? I just wanted to open a general discussion issue on the topic before I do too much.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions