rust -> wasm32-unknown-wasi -> lucet

Fastly が 4月に公開した wasm のコンパイラ/実行環境の Lucet を使ってみたかったので使ってみた。

なんで?

JVMが人類の至宝であることは疑いの余地もないが、VM自体の起動が遅いとかいろいろあり FaaS での利用が非常に苦しく、人類は次の至宝を作ろうとしている。それが WASI である。 WASI というのはざっくり説明すると wasm をブラウザ以外で動かすためのサンドボックス標準仕様で、それを何らかのソフトウェアがサポートする形になっている。そのひとつが先日出た Lucet である。いい機会なのでこの次世代の至宝となる原石に触れておこうと思った。

OSX上で触る手順

  • Docker for Mac 入れて起動する
  • Lucet のリポジトリから clone
  • READMEに従い source devenv_setenv.sh する
    • Docker のイメージビルドから始まりなかなか長い

これで wasm32-unknown-wasi-* 系のコマンドが使えるようになり、READMEに従っていろいろコンパイルして実行できる。

でもこのままじゃRustは使えない。なんかRustに関するドキュメントもあんまりない

Rust を Lucet で動かせるようにする

キモとしては rustc / cargo で wasm32-unknown-wasi をターゲットにできるようにすることである。

  • まず普通に Rust インストールする
  • rustup install beta
    • ここのチャネルが nightly だったり beta だったりするのが辛い(従ってこの手順の賞味期限も長くない)
  • rustc +beta --target wasm32-unknown-wasi hello.rs とかやってみて wasm が出てきたら Lucet にぶち込んで実行
  • crate 使いたいなら cargo 使おうね

触ってみて

  • これ50μsで起動するのマジ?
  • やっぱりネットワーク関連の実装が全滅してて今実用的かというとウーン

導入めんどいので FaaS 使えるなら使うって流れになりそうだなぁ