While compilers should be conservative when targeting WebAssembly Core features, runtimes should be lenient as otherwise people need to constantly turn on all features. Currently, most examples have to turn on 2.0 features because compilers such as AssemblyScript and TinyGo use them by default. This matches the policy with the reality, and should make first time use easier. This top-levels an internal type as `api.CoreFeatures` and defaults to 2.0 as opposed to 1.0, our previous default. This is less cluttered than the excess of `WithXXX` methods we had prior to implementing all planned WebAssembly Core Specification 1.0 features. Finally, this backfills rationale as flat config types were a distinct decision even if feature set selection muddied the topic. 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.
See https://wazero.io/languages/tinygo/ for more tips.