Resultados múltiples en WebAssembly
Una función puede dejar varios valores; quien llama los usa en orden.
(module
;; A function may leave several results on the stack; the caller
;; receives them in order.
(func $divmod (export "divmod") (param $n i32) (param $d i32)
(result i32 i32)
(i32.div_s (local.get $n) (local.get $d))
(i32.rem_s (local.get $n) (local.get $d)))
;; The two results feed the next instruction like any operands.
(func (export "digit_sum_2") (param $n i32) (result i32)
(call $divmod (local.get $n) (i32.const 10))
i32.add))
Cómo funciona
(result i32 i32)tipa dos retornos — aquí cociente y resto.- El cuerpo empuja ambos; no hace falta nada más.
- El
i32.addde quien llama consume el par directo de la pila.
Palabras clave y builtins usados aquí
callexportfunci32moduleparamresult
El intento, en números
- Líneas
- 12
- Caracteres a escribir
- 440
- Tokens
- 84
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 78 segundos.
Paso 3 de 3 en Tipos más anchos; paso 25 de 28 en Fundamentos del lenguaje.