tinygo-org / tinygo

Go compiler for small places. Microcontrollers, WebAssembly (WASM/WASI), and command-line tools. Based on LLVM.
https://tinygo.org
Other
15.43k stars 911 forks source link

WASI reactor mode #2735

Open slinkydeveloper opened 2 years ago

slinkydeveloper commented 2 years ago

Hi all,

I've been experimenting with tinygo having some fun prototyping a go wasm application hosted by wasmtime-java. Unfortunately, I hit a bug/missing feature when trying to access the memory: https://github.com/kawamuray/wasmtime-java/issues/21. As described in that issue, tinygo cannot compile in reactor mode, hence preventing wasmtime-java to access its memory. Although this might be recognized as a limitation of the engine (apparently others, at least from the documentation, can switch the usage mode independently from the exports https://wasmedge.org/book/en/dev/go.html#a-simple-function-run), I think it would be nice if tinygo can support the reactor mode.

I tried to prototype the support myself following what was done for clang https://reviews.llvm.org/D62922 and this is roughly what I needed to come up with a correct export:

If you want I can also provide a proper PR, but i need some guidance :)

codefromthecrypt commented 2 years ago

There may be issues after this, but I guess the main question is how to control the //export name (ex based on flags). Is templating supported?

https://github.com/tinygo-org/tinygo/blob/release/src/runtime/runtime_wasm_wasi.go#L16

aykevl commented 2 months ago

https://github.com/tinygo-org/tinygo/pull/4451 implements reactor mode for wasip1.