upvote
Compiling WASM to C is a really good option: https://00f.net/2023/12/11/webassembly-compilation-to-c/
reply
Shameless plug… compiling it to Go is a great option too: https://github.com/ncruces/wasm2go

I've used it to translate SQLite (with a few extensions) and, that I know of, it's been used (to varying degrees of success) to translate the MARISA trie library (C++), libghostty (Zig), zlib, Perl, and QuickJS.

More on-topic, I use a mix of an unevaluated expression stack and a stack-to-locals approach to translate Wasm.

reply
But how do you handle arguments or loop index variables? Your liveness is the entire function? You have to compile all the WASM chunks together in order to do any optimization? That seems ... problematic.

Edit: Yep. In article referenced from the original: http://troubles.md/posts/wasm-is-not-a-stack-machine/

Double edit: Some of this has already been fixed in WASM: https://github.com/WebAssembly/multi-value

reply