i64 y cambios de ancho en WebAssembly
Doblar el ancho es explícito en ambas direcciones.
(module
;; i64 doubles the width; extend and wrap cross between the sizes.
(func (export "square_wide") (param $n i32) (result i64)
(local $wide i64)
(local.set $wide (i64.extend_i32_s (local.get $n)))
(i64.mul (local.get $wide) (local.get $wide)))
;; Wrapping keeps the low 32 bits and drops the rest.
(func (export "low_bits") (param $big i64) (result i32)
(i32.wrap_i64 (local.get $big)))
(func (export "millis_to_secs") (param $ms i64) (result i64)
(i64.div_u (local.get $ms) (i64.const 1000))))
Cómo funciona
i64.extend_i32_sensancha con signo; la cuenta sigue en i64.i32.wrap_i64se queda con los 32 bits bajos y suelta el resto.i64.div_umuestra que el tipo ancho trae el set completo.
Palabras clave y builtins usados aquí
exportfunci32i64localmoduleparamresult
El intento, en números
- Líneas
- 13
- Caracteres a escribir
- 501
- Tokens
- 104
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 104 segundos.
Paso 1 de 3 en Tipos más anchos; paso 23 de 28 en Fundamentos del lenguaje.