Deno v1.1.2でWebAssembly System Interface (WASI)が使えるようになったので試す


Deno v1.1.2で実験的にWebAssembly System Interface (WASI)が使えるようになった
そこでとりあえず適当な.wasmファイルをstd/wasiを介して実行してみる

Rustで書かれた次のようなWebAssemblyコードがあったとする

main.rs
fn main() {
  println!("hello")
}
rustup target add wasm32-wasi
rustc --target wasm32-wasi main.rs # main.wasm がつくられる

つくられた .wasm ファイルを読み込み、 _start エントリーポイントを介して実行する

main.ts
import WASI from "https://deno.land/std/wasi/snapshot_preview1.ts";
const wasi = new WASI({});
const binary = await Deno.readFile("main.wasm");
const module = await WebAssembly.compile(binary);
const instance = await WebAssembly.instantiate(module, {
  wasi_snapshot_preview1: wasi.exports,
});
wasi.memory = instance.exports.memory;
instance.exports._start();
deno run --allow-read main.ts # => hello

実行できた
詳細とサポート状況に関しては std/wasi を参照してほしい