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
(loop $top ...)etiqueta su propio inicio;(br $top)da la vuelta.- El
(block $done ...)de afuera le da salida albr_if. - Acumulador y contador son locales comunes movidos por set y add.
Palabras clave y builtins usados aquí
blockbrbr_ifexportfunci32localloopmoduleparamresult
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.
Paso 3 de 3 en Control de flujo; paso 12 de 28 en Fundamentos del lenguaje.