2026年8月24日月曜日

WebAssemblyという仕様を、味わう。

味わう仕様書

WebAssemblyという仕様を、味わう。

使い方の説明だけでは見えない、WASMのメモリ、Module、import / export、Emscripten、WASI。 実装と仕様書の間をうろうろしながら読んでいきます。

味わう仕様書 WASM

使い方ではなく、仕様を読む。

WebAssemblyは「CやRustをブラウザで動かすもの」と説明すれば、ひとまず使えます。 けれど、実際に何がModuleになり、何がimportされ、何がexportされ、 JavaScriptとWASMの境界で何が起きているのかを見ると、仕様そのものの輪郭が立ち上がってきます。

01 / MEMORY

勝手に外へ出られない

ambient accessを持たない設計と、線形メモリの範囲外アクセスがtrapになる仕組みを仕様から見ます。

02 / MODULE

compileの後に何がある?

Module、compile、instantiate、import、export。 似た言葉を、実際の処理の順番に置き直します。

03 / EMSCRIPTEN

生成されたJSを覗く

sql.jsを手がかりに、onRuntimeInitialized、ccall / cwrap、 WASM側で短縮されたexport名まで追います。

04 / WASI

ブラウザの外へ

Wasmtime、WASI、WIT、Component Model。 「WebのAssembly」という名前の外側で何が始まっているのかを見ます。

この本で見るもの

WebAssembly Core Specification
WebAssembly JavaScript Interface
linear memory / trap
Module / compile / instantiate
import / export
Emscripten
sql.js / sql-wasm.js
ccall / cwrap
Wasmtime / WASI
WIT / Component Model ABI

目次

WASM登場
WASMの安全性
で、具体の面(本文)
いろんなWASM
WasmtimeとWASI JS面以外のWASM
コンポーネントとWIT/ABI
WASM3など組み込み系の取り組み

仕様書を、読む対象にする。

APIの使い方を覚えるだけなら、もっと短い説明で済みます。 この本では、仕様の文言と実装の振る舞いがどこで重なり、どこでずれて見えるのかを、 実際の生成物や周辺ツールまで行き来しながら確かめます。

味わう仕様書 WASM

WebAssemblyという仕様を、味わう。