The componentized successor to wasi_snapshot_preview1 is not compatible with the prior imports or even error numbers. Before releasing wazero 1.0 we need to change this package to reflect that WASI 2 is effectively a different API. Fixes #263 Signed-off-by: Adrian Cole <adrian@tetrate.io>
TinyGo allocation example
This example shows how to pass strings in and out of a Wasm function defined
in TinyGo, built with tinygo build -o greet.wasm -scheduler=none -target=wasi greet.go
Ex.
$ go run greet.go wazero
wasm >> Hello, wazero!
go >> Hello, wazero!
Under the covers, greet.go does a few things of interest:
- Uses
unsafe.Pointerto change a Go pointer to a numeric type. - Uses
reflect.StringHeaderto build back a string from a pointer, len pair. - Relies on TinyGo not eagerly freeing pointers returned.
Go does not export allocation functions, but when TinyGo generates WebAssembly, it exports "malloc" and "free", which we use for that purpose. These are not documented, so not necessarily a best practice. See the following issues for updates:
- WebAssembly exports for allocation: https://github.com/tinygo-org/tinygo/issues/2788
- Memory ownership of TinyGo allocated pointers: https://github.com/tinygo-org/tinygo/issues/2787
Note: While folks here are familiar with TinyGo, wazero isn't a TinyGo project. We hope this gets you started. For next steps, consider reading the TinyGo Using WebAssembly Guide or joining the #TinyGo channel on the Gophers Slack.