typestar

loop y br en WebAssembly

Sobre un loop, br salta al tope: esa es toda la historia del while.

(module
  ;; A loop label points at the top, so br means "go around again".
  ;; The surrounding block gives br_if somewhere to exit to.
  (func (export "sum_to") (param $n i32) (result i32)
    (local $i i32)
    (local $acc i32)
    (block $done
      (loop $top
        (br_if $done (i32.gt_s (local.get $i) (local.get $n)))
        (local.set $acc (i32.add (local.get $acc) (local.get $i)))
        (local.set $i (i32.add (local.get $i) (i32.const 1)))
        (br $top)))
    (local.get $acc)))

Cómo funciona

  1. (loop $top ...) etiqueta su propio inicio; (br $top) da la vuelta.
  2. El (block $done ...) de afuera le da salida al br_if.
  3. Acumulador y contador son locales comunes movidos por set y add.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
13
Caracteres a escribir
439
Tokens
94
Ritmo de tres estrellas
60 tpm

Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 94 segundos.

Escribe este fragmento

Paso 3 de 3 en Control de flujo; paso 12 de 28 en Fundamentos del lenguaje.

← Anterior Siguiente →