typestar

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

  1. (result i32 i32) tipa dos retornos — aquí cociente y resto.
  2. El cuerpo empuja ambos; no hace falta nada más.
  3. El i32.add de quien llama consume el par directo de la pila.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 3 en Tipos más anchos; paso 25 de 28 en Fundamentos del lenguaje.

← Anterior Siguiente →