wat / notes

.wat → .wasm

WebAssembly
в текстовом виде

WAT — читаемая запись WebAssembly. Несколько примеров, чтобы разобраться в скобках, функциях и стеке.

01 / ОСНОВА

Все начинается с модуля

Внутри module описываются функции, память, импорты и экспорты. Даже пустой модуль корректен.

;; самый короткий пример
(module)
02 / ФУНКЦИЯ

Два числа, одна сумма

Параметры получают имена и типы. Экспорт делает функцию доступной снаружи модуля.

(module
  (func (export "sum")
    (param $x i32) (param $y i32)
    (result i32)
    local.get $x
    local.get $y
    i32.add))
03 / СТЕК

Инструкции идут по порядку

const кладет значение на стек. add забирает два значения и кладет обратно их сумму.

i32.const 12  ;; [12]
i32.const 8   ;; [12, 8]
i32.add       ;; [20]
04 / ИНСТРУМЕНТЫ

Из текста в байты и обратно

Утилиты из набора WABT преобразуют текстовый формат в бинарный и проверяют готовый модуль.

wat2wasm sum.wat -o sum.wasm
wasm-validate sum.wasm
wasm2wat sum.wasm
i32 / i64 — целые f32 / f64 — с плавающей точкой