Files
wazero/examples/allocation
Crypt Keeper 57a705e594 Disallows nil context and fixes linters (#754)
staticcheck linters broke until recent golangci-lint. Now, normal
behaviour of enforcing no nil context works again. Ex.
```
assemblyscript/assemblyscript_example_test.go:16:25: SA1012: do not pass a nil Context, even if a function permits it; pass context.TODO if you are unsure about which Context to use (staticcheck)
	r := wazero.NewRuntime(nil)
```

Since default lint already checks for nil context, this removes our
permission of nil context args. The original reason we permitted nil is
no longer valid: we once allowed context to be stashed in config, and
removed that as it caused bugs. We forgot to undo allowing nil
explicitly.

Note: this doesn't particularly check in our code for nil context,
similar as we don't particularly check in our code for nil anything
else. End users should use linters as none of our parameters should be
nil anyway.

Signed-off-by: Adrian Cole <adrian@tetrate.io>
2022-08-19 14:52:50 +08:00
..
2022-08-18 14:47:49 +09:00
2022-08-18 14:47:49 +09:00
2022-08-11 16:31:06 +08:00

Allocation examples

The examples in this directory deal with memory allocation concerns in WebAssembly, e.g. How to pass strings in and out of WebAssembly functions.

$ go run greet.go wazero
wasm >> Hello, wazero!
go >> Hello, wazero!

While the below examples use strings, they are written in a way that would work for binary serialization.

  • Rust - Calls Wasm built with cargo build --release --target wasm32-unknown-unknown
  • TinyGo - Calls Wasm built with tinygo build -o X.wasm -scheduler=none --no-debug -target=wasi X.go
  • Zig - Calls Wasm built with zig build

Note: Each of the above languages differ in both terms of exports and runtime behavior around allocation, because there is no WebAssembly specification for it. For example, TinyGo exports allocation functions while Rust and Zig don't. Also, Rust eagerly collects memory before returning from a Wasm function while TinyGo does not.

We still try to keep the examples as close to the same as possible, and highlight things to be aware of in the respective source and README files.