bytecodealliance / jco

JavaScript toolchain for working with WebAssembly Components
https://bytecodealliance.github.io/jco/
Apache License 2.0
640 stars 63 forks source link

Allow async function to be imported/exported #39

Open eduardomourar opened 1 year ago

eduardomourar commented 1 year ago

There are certain cases where the host/guest implementation needs to pass an asynchronous function. Can this be supported in the JavaScript codegen even when the WIT definition has its signature as synchronous?

guybedford commented 1 year ago

It is up to the implementation to ensure it provides a sync API. In Node.js it is always possible to syncify any call though on the implementaiton side by creating a worker thread and using atomics to synchronously wait on a shared lock in the worker that is performing asynchronous work. Usually it's best to just have a fully sync implementation though.

DougAnderson444 commented 8 months ago

Have you guys seen the work Joel Dice did here: https://github.com/dicej/isyswasfa/tree/main

It's very experimental at this point and only in Rust, but looks like it will be very useful when he gets to JavaScript.

guybedford commented 8 months ago

Yes, we will follow in this path in the Jco project, where functions may support both sync and async variants depending on the canon ABI option passed. Preview 3 support is a little way off though still.

If anyone is interested in prototyping in the mean time along a similar lines, work here would be welcome.

DougAnderson444 commented 4 months ago

linking here for reference: https://github.com/dicej/isyswasfa/issues/1#issuecomment-1974838959