Hello.
I've now gotten my Javy built WASM program to run and do a hello world so my next question is how I would integrate WASM code written in different languages (for example AssemblyScript or Rust) and run them from within the JavaScript.
I think it would be very beneficial for this to be documented and/or to become an example on the Javy Github.
The short answer is that isn't possible using the Javy CLI.
What you can do is use the javy
and javy-apis
crate along with your own Rust code to build your own Wasm module that includes whatever Wasm imports you need (in Rust) and then you can use the wrap_callback
method on JSContextRef
(accessible via the context
method on Runtime
) to expose functions to the JavaScript runtime that will enable the JS code to invoke those imported Wasm functions. You'll also need to set up a linker in your browser or Wasmtime runtime to link the exports from your other Wasm modules to the Wasm module you create. Does that make sense?
Another option to consider is looking into jco which should provide better tooling if you want to use Wasm components and JavaScript.
Jeff Charles said:
The short answer is that isn't possible using the Javy CLI.
What you can do is use the
javy
andjavy-apis
crate along with your own Rust code to build your own Wasm module that includes whatever Wasm imports you need (in Rust) and then you can use thewrap_callback
method onJSContextRef
(accessible via thecontext
method onRuntime
) to expose functions to the JavaScript runtime that will enable the JS code to invoke those imported Wasm functions. You'll also need to set up a linker in your browser or Wasmtime runtime to link the exports from your other Wasm modules to the Wasm module you create. Does that make sense?
Right that makes sense. Rust is totally new to me but the fun of being able to use different languages and libraries from them in the same ecosystem is why I started the project. So I'll have to learn a bit of Rust to get going :)
My aim is to use PureScript for the application code, Javy for providing it as WASM and https://github.com/lunatic-solutions/lunatic for the server side runtime.
I think using the approach you described would allow me to package the WASM file with the rust crates, javy & quickjs & application code part and run it as a lunatic application :)
This is pretty challenging but that's the fun \ :D /
Sorry, I'm not quite following what you mean by:
package the WASM file with the rust crates, javy & quickjs & application code part
What I was suggesting was you can create a Rust app or library which will compile to a Wasm module. And that Rust app or library that you're compiling to Wasm can use the javy
and javy-apis
crates to run JS (or PureScript).
If you want to call exports from other Wasm modules or make exports from your Wasm module available to other Wasm modules, you may want to look into the Wasm component model and jco instead. You can make it work with your own Rust code but jco and the component model provide helpful abstractions for sending complex data (that is, values that aren't numbers) between Wasm modules.
Last updated: Dec 23 2024 at 12:05 UTC