Locales en WebAssembly
Declarados al frente, arrancan en cero, se mueven con get y set.
(module
;; Locals are declared up front, zero-initialized, and read and
;; written with local.get and local.set.
(func (export "swap_diff") (param $a i32) (param $b i32) (result i32)
(local $high i32)
(local $low i32)
(local.set $high (local.get $a))
(local.set $low (local.get $b))
(if (i32.lt_s (local.get $high) (local.get $low))
(then
(local.set $high (local.get $b))
(local.set $low (local.get $a))))
(i32.sub (local.get $high) (local.get $low))))
Cómo funciona
(local $high i32)reserva un lugar; los locales siguen a los params.local.setsaca de la pila al lugar;local.getempuja una copia.- El if intercambia los dos lugares cuando las entradas llegan al revés.
Palabras clave y builtins usados aquí
exportfunci32iflocalmoduleparamresultthen
El intento, en números
- Líneas
- 13
- Caracteres a escribir
- 452
- Tokens
- 98
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 90 segundos.
Paso 1 de 3 en Locales y la pila; paso 7 de 28 en Fundamentos del lenguaje.