wasmtime-go icon indicating copy to clipboard operation
wasmtime-go copied to clipboard

Add SetStdout SetStdin

Open c0mm4nd opened this issue 5 years ago • 4 comments

I saw that I cannot easily convert the string path in SetStdoutFile(path string) to the io.ReadWriter on wasmtime-go, so this is a suggestion to wasmtime.

io.ReadWriter is an interface which implemented by os.File and bytes.Buffer. With an io.ReadWriter as the parameter for WASI config, golang can operate its favor bytes without filesystem-level io, which means the WASI call will be more easy safe and stable.

buf := bytes.NewBuffer(nil)
config := wasmtime.NewWasiConfig()	
config.SetStdin(buf)
config.SetStdout(buf)

// then instaniate the wasi with the config

go func(){
	b, err buf.ReadBytes('\n')
	// handle this
}()
go instance.GetExport("_start").Func().Call()
// now intance request a stdin
buf.Write("continue exec")

c0mm4nd avatar Jul 19 '20 09:07 c0mm4nd

This is similar to https://github.com/bytecodealliance/wasmtime-py/issues/34 where there's support for this in the Rust wasmtime API but support has yet to be added to the C API

alexcrichton avatar Jul 20 '20 14:07 alexcrichton

Bumping this, as it would be extremely useful to be able to pass stdin and get stdout from modules :)

@alexcrichton if you have any advice on how we could help implement this, we'd love to contribute.

cohix avatar Oct 20 '22 20:10 cohix

Implementing this would first need to start out at the Wasmtime C API layer. There's not a ton of Wasmtime-specific prior art to choose from unfortunately, so the APIs for this at the C layer need to be designed from scratch and implemented. Once that's landed then the Go support can be built on top of that.

alexcrichton avatar Oct 20 '22 21:10 alexcrichton

Bumping this as well, I think it would be pretty handy to have this functionality implemented as in the Rust implementation.

jaime-amate avatar Feb 15 '24 17:02 jaime-amate