typestar

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

  1. (local $high i32) reserva un lugar; los locales siguen a los params.
  2. local.set saca de la pila al lugar; local.get empuja una copia.
  3. El if intercambia los dos lugares cuando las entradas llegan al revés.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 3 en Locales y la pila; paso 7 de 28 en Fundamentos del lenguaje.

← Anterior Siguiente →