
Cmm_of_wasm: From WebAssembly to Native Code via the OCaml Back End - octosphere
http://simonjf.com/2018/08/27/cmm-of-wasm.html
======
spiffytech
So we could hypothetically convert nginx to WASM with wasmer, then convert it
back to native code with cmm_of_wasm? We've come full circle.

~~~
kodablah
As an adjacent dead comment points out, you'd use Emscripten to "convert nginx
to WASM" (i.e. "compile"). Wasmer is a runtime.

But there are actually use cases to what you're talking about. Essentially
instead of nginx -> LLVM -> machine code you're replacing it with nginx ->
WASM -> cmm_of_wasm -> machine code. There are tons of LLVM opts already, but
if there weren't, it might be reasonable to use WASM as IR and using
cmm_of_wasm's opts to make it faster than a naive C compiler (but of course
none of the popular compilers are naive anyways). Also, of course this won't
work today because cmm_of_wasm doesn't rebuild the syscalls from emscripten-
compiled-WASM (yet). But if you're writing your own language today, ignoring
system interaction for a sec, targeting WASM even for native might not be a
bad idea as backends are coming w/ optimizations.

------
leeoniya
what is it about OCaml that makes it popular as a first stage in implementing
new languages and/or compilers?

also...

> and eventually we hope to hook into OCaml’s excellent garbage collector

isnt WASM gc-free? why would the output need explicit GC interaction?

~~~
a0
WASM currently does not have a GC but that's precisely why one is needed.
Languages that target WASM need to implement their own GC but there's already
a proposal to integrate a GC implementation into WASM[1].

[1]:
[https://github.com/WebAssembly/gc/blob/master/proposals/gc/O...](https://github.com/WebAssembly/gc/blob/master/proposals/gc/Overview.md)

