⚡
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つのビルドモードが用意されています。
ビルドモード比較表
| 項目 | Debug |
ReleaseFast |
ReleaseSafe |
ReleaseSmall |
|---|---|---|---|---|
| コンパイル速度 | 速い | 遅い | 遅い | 遅い |
| 安全性チェック | あり | なし | あり | なし |
| 実行時のパフォーマンス | 遅い | 速い | 中程度 | 中程度 |
| バイナリのサイズ | 大きい | 大きい | 大きい | 小さい |
先ほどのコンパイルでは何も指定していないので、デフォルトの Debug モードが使用されたはずです。
ReleaseSmall モードを試してみる
$ zig build-exe hello.zig -target wasm32-wasi -O ReleaseSmall
Discussion