Estilo de pila y estilo plegado en WebAssembly
La misma función dos veces: empujes crudos, luego s-expresiones anidadas.
(module
;; Plain form: instructions push and pop an implicit stack.
(func (export "average_stack") (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add
i32.const 2
i32.div_s)
;; Folded form: the same instructions, nested as s-expressions.
(func (export "average_folded") (param $a i32) (param $b i32) (result i32)
(i32.div_s
(i32.add (local.get $a) (local.get $b))
(i32.const 2))))
Cómo funciona
- La forma plana lista instrucciones; cada
local.getempuja,i32.addsaca dos. - La forma plegada anida los operandos dentro de su operador, como Lisp.
- Ambas deletrean el mismo bytecode — plegar es solo para quien lee.
Palabras clave y builtins usados aquí
exportfunci32moduleparamresult
El intento, en números
- Líneas
- 14
- Caracteres a escribir
- 406
- Tokens
- 77
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 71 segundos.
Paso 3 de 3 en Módulos; paso 3 de 28 en Fundamentos del lenguaje.