Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

FAQ & トラブルシューティング

一般

zwasm はどの Wasm プロポーザルに対応していますか?

Wasm 3.0 の全 9 プロポーザルに加え、threads、wide arithmetic、custom page sizes に対応しています。詳細は Spec Coverage をご覧ください。

zwasm は Windows に対応していますか?

現時点では対応していません。zwasm は macOS (ARM64) および Linux (x86_64, aarch64) で動作します。JIT とメモリガードページは POSIX API (mmap, mprotect, シグナルハンドラ) を使用しています。

JIT なしで zwasm を使えますか?

はい。デフォルトではインタープリタがすべての関数を処理します。JIT はホットな関数に対してのみ起動されます。特定の関数に対して JIT を無効にする方法はありませんが、呼び出し回数が約 8 回未満の関数は常にインタープリタで実行されます。

WAT パーサとは何ですか?

zwasm は .wat テキスト形式のファイルを直接実行できます: zwasm run program.wat。WAT パーサはコンパイル時に -Dwat=false を指定することで無効化でき、バイナリサイズを削減できます。

トラブルシューティング

“trap: out-of-bounds memory access”

Wasm モジュールがリニアメモリの範囲外のメモリを読み書きしようとしました。これは zwasm ではなく Wasm モジュール側のバグです。モジュールのメモリがデータに対して十分な大きさがあるか確認してください。

“trap: call stack overflow (depth > 1024)”

再帰的な関数呼び出しが深さ 1024 の制限を超えました。これは通常、Wasm モジュール内の無限再帰が原因です。

“required import not found”

モジュールが必要とするインポートが提供されていません。zwasm inspect を使用してモジュールに必要なインポートを確認し、--link またはホスト関数で提供してください。

“invalid wasm binary”

ファイルが有効な WebAssembly バイナリではありません。マジックバイト \0asm とバージョン \01\00\00\00 で始まっているか確認してください。WAT ファイルには .wat 拡張子を使用してください。

パフォーマンスが遅い

  • zig build -Doptimize=ReleaseSafe でビルドしていることを確認してください。デバッグビルドは 5〜10 倍遅くなります。
  • ホットな関数 (多数回呼び出される関数) は自動的に JIT コンパイルされます。実行時間の短いプログラムでは JIT の恩恵を受けられない場合があります。
  • --profile を使用してオペコードの頻度と呼び出し回数を確認できます。

メモリ使用量が多い

  • リニアメモリを持つすべての Wasm モジュールはガードページ (仮想メモリ約 4 GiB、物理メモリではない) を確保します。これは正常な動作で、VSIZE は大きく表示されますが RSS は小さいままです。
  • --max-memory を使用してモジュールが確保できる実際のメモリ量を制限できます。