← Back to context

Comment by stevefan1999

7 hours ago

I'm trying to implement a WASM to C compiler, and because of that not-quite-so-stack behavior, I can actually guarantee that it will always build an expression and I don't have to discard or reset stack value! Everything stays within that function, which is very neat, and I think it is one of the reason WAT, the textual format is so neat, that you can represent it with a S-Expression.

Compiling WASM to C is a really good option: https://00f.net/2023/12/11/webassembly-compilation-to-c/

  • 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.