makspll/bevy_mod_scripting

Consider adding a WebAssembly interpreter as a host

Opened this issue · 1 comments

Adding a WebAssembly interpreter, that supports the component model, for example the reference implementation wasmtime as a script host will allow using a bunch of languages for scripting (currently JavaScript, Python, Go) and quickly compiled and hot-reloaded rust.

WASM interface definition format also looks like a good fit to describe the scraped bevy API.

Downsides are:

  • the wasmtime dependency is quite large (45 seconds of compilation in an empty project from scratch on my ryzen 9 machine)
    • put it behind a feature flag or
    • seek for an alternative leaner implementation
  • the wasm component model, that includes the WIT seems to still being stabilized

Does this sound like a good idea to explore?
Thank you for developing this!

Hey @Sorseg!

Web assembly is definitely something I am interested in experimenting with. I haven't considered the idea of interpreting it!

I think this is definitely the approach I see as most compatible with this lib. Only issue I see is think we'd need to wait for the rust wasm interpreter to support the component model, but please correct me if I am wrong.

I am not familiar enough with WASM to tell if an effective script API would be plausible within vanilla WASM.

I would also wait for the Trait system overhaul PR #112 to merge (should be a few weeks) before developing this as it will make any sort of new integrations a million times simpler.