⚙️

Wasmer3.0 🎉

2022/12/03に公開

2022年11月23にWasmer3.0がリリースされていたので、リリースの内容をまとめました。

Wasmerとは

WebAssemblyをあらゆる環境で実行できるようにするもの(ランタイム)

  • WASIとEmscriptenと互換性がある
  • Wasmer以外に有名なランタイムはwasmtime

以前、Wasmerを使って”Hello, world!”をする記事を書いたので、良ければご覧ください。
https://zenn.dev/k41531/articles/ab0bd8a20d562b

Wasmer3.0

ここではいくつかピックアップして紹介しています。もっと知りたい方はWasmerの公式ブログへ!
https://wasmer.io/posts/announcing-wasmer-3.0

  1. wasmer cliからwapm.ioにあるパッケージを実行できるようになった。
  2. Wasmからネイティブな実行ファイルを作成可能に(Windowsも含む!)
  3. Zero-copy Deserializationによるパフォーマンス向上
  4. 複数のエンジンの概念を使っていたが、一つに集約しコードの再利用性を高めた。
    https://github.com/wasmerio/wasmer/pull/2946

分かりやすいものについては実際に試してみました。

wasmer cliからwapmのパッケージを実行

これは、nodejsにおけるnpxのような機能が追加されたと考えれば良いかもしれません。

wapmとは

Wasmerをインストールする時に、一緒にインストールされるパッケージマネージャーです。

以前は、Wasmのパッケージを使えるようにするために、installコマンドでカレントディレクトリに落としてくる必要がありました。

❯ wapm install cowsay
[INFO] Installing syrusakbary/cowsay@0.2.0
Package installed successfully to wapm_packages!
❯ wapm run cowsay hello wasm!
 _____________
< hello wasm! >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
               ||----w |
                ||     ||

今回のアップデートでwasm runで簡単に実行できるようになりました。

❯ wasmer run syrusakbary/cowsay hello wasm!
 _____________
< hello wasm! >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
               ||----w |
                ||     ||

Wasmからネイティブバイナリを作れる

8月のWasmerのブログで、3.0ではどこでも動作するネイティブバイナリを生成できることが言及されていました。
https://wasmer.io/posts/wasm-as-universal-binary-format-part-1-native-executables
wasmファイルを実行ファイルに変換する。

❯ wasmer create-exe hello.wasm -o ./hello
❯ file hello
hello: Mach-O 64-bit executable arm64

wasmファイルをwindows用の実行ファイルに変換する。

❯ wasmer create-exe hello.wasm --target x86_64-pc-windows-gnu  -o ./hello.exe
❯ file hello-windows.exe
hello.exe: PE32+ executable (console) x86-64, for MS Windows

作った実行ファイルをWindowsで動かしてみましたが、問題なく動きました。

Zero-copy Deserialization

ゼロコピー・デシリアライゼーションで起動時のパフォーマンスが大幅に向上したとありましたが、そもそもこの技術についてよく知りませんでした。
rkyvのドキュメントによるとZero-copy Deserializationで、デシリアライズのパフォーマンスが良くなるとのことです。
https://rkyv.org/motivation.html
面白そうな技術なので、こちらについてはまた調べて記事にしてみようかと思います。

Discussion