Zig を WASI 対応の Wasm バイナリにコンパイル

に公開

Zig コードを WASI をサポートした Wasm バイナリにコンパイルしてみます。

用意したもの

  • Zig: 0.15.1
  • Wasmtime: 37.0.1

Zig の例コードを作成

今回は次のような Hello World コードを用意。hello.zig という名前で保存しておきましょう。

hello.zig
const std = @import("std");

pub fn main() void {
    std.debug.print("Hello, World!\n", .{});
}

コンパイル

target オプションを wasm32-wasi に設定します。

$ zig build-exe hello.zig -target wasm32-wasi

Wasm バイナリが hello.wasm という名前で保存されるはずです。

実行

$ wasmtime hello.wasm
Hello, World!

他のビルドモードも試してみる

Zig には4つのビルドモードが用意されています。

https://ziglang.org/documentation/master/#Build-Mode

ビルドモード比較表

項目 Debug ReleaseFast ReleaseSafe ReleaseSmall
コンパイル速度 速い 遅い 遅い 遅い
安全性チェック あり なし あり なし
実行時のパフォーマンス 遅い 速い 中程度 中程度
バイナリのサイズ 大きい 大きい 大きい 小さい

先ほどのコンパイルでは何も指定していないので、デフォルトの Debug モードが使用されたはずです。

ReleaseSmall モードを試してみる

$ zig build-exe hello.zig -target wasm32-wasi -O ReleaseSmall

Discussion