Write and Run

it's a simple way, but the only way.

RustをEmscriptenなしでwasmにコンパイルしてNode.jsから呼び出す

std: Add a new wasm32-unknown-unknown target by alexcrichton · Pull Request #45905 · rust-lang/rust · GitHub

Rust の nightly で wasm32-unknown-unknown という target が入ったので、Emscripten ナシでも wasm を吐けるようになったということで。

やった。

github.com

普通に serde とか使えて便利。

文字列を渡すときには Rust 側の関数で alloc してヒープのそのポインタへ JS から書いてやる必要がある。で、関数にはそのポインタを渡す。 受け取るときはポインタが返ってくるのでヒープを読みに行く必要がある。while (mem[ptr] != 0) みたいなことになってるけど、これもっといい方法無いんですかね。

あと、dealloc は忘れずに。

fat pointer を返したらいいんじゃね? と思ったけど、128bit をどうやって渡せばいいんだろうな wasm32 だから fat pointer は 64bit か?