Saltar al contenido

Emitir Wasm

En esta página

La flag --emit wasm instruye al compilador a generar un módulo .wasm en lugar del binario nativo. En el modo predeterminado (VM-embedded) el resultado es un único archivo que incluye la VM Zolo junto con tu bytecode; las capacidades de I/O son provistas por el host-shim ABI — funciones importadas que el runtime WASI o el loader JS inyectan en el momento de la instanciación.

El comando básico:

zolo build 32-webassembly/01-emit-wasm.zolo --emit wasm
# -> target/01-emit-wasm-0.0.0.wasm

El programa más sencillo posible en wasm es un fn main() que llama a print:

Módulo VM-embedded mínimo; print es el único I/O wasm-seguro hoy.

01-emit-wasm.zolo
Playground
// Feature: WebAssembly output — `zolo build --emit wasm`

// Syntax: `zolo build file.zolo --emit wasm`

// When to use: run Zolo inside a WASM host (WASI runtime, or a browser

//   via the generated JS glue).


// Run:

//   zolo build 32-webassembly/01-emit-wasm.zolo --emit wasm

//   # -> Built target/01-emit-wasm-0.0.0.wasm (...)

//

// By default this emits a VM-embedded module under the host-shim ABI:

// the Zolo VM + your bytecode are packaged into one `.wasm`, and host

// capabilities (I/O, etc.) are provided through imported shim functions.

// Default host profile is `wasi` (see 02 for `--host browser` / `--aot`).

//

// AOT (pure-wasm, no embedded VM) now executes this program end-to-end:

//   zolo build 32-webassembly/01-emit-wasm.zolo --emit wasm --aot --host browser -o target/aot/01.wasm

//   node crates/zolo-wasm-aot/tests/run_wasm.mjs target/aot/01.wasm

//     # -> Hello from WebAssembly!


fn main() {
  print("Hello from WebAssembly!")
}
// Heads-up (wasm-safe surface, current state): only `std::os` is

// wasm-safe today. crypto / log / datetime / fs / io still panic when

// called inside wasm, and `process.open()` panics at boot via

// `Instant::now()`. Keep wasm programs to plain compute + `print` for now.

//

// expected (run natively): Hello from WebAssembly!

Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.

Superficie wasm-segura actual: solo std::os funciona dentro de un módulo wasm. Los módulos crypto, log, datetime, fs e io aún generan pánico al ser llamados, y process.open() entra en pánico al inicio por depender de Instant::now(). Por ahora, mantén los programas wasm limitados a cálculos puros y print.

El modo AOT también ejecuta este programa de principio a fin:

zolo build 32-webassembly/01-emit-wasm.zolo --emit wasm --aot --host browser \
  -o target/aot/01.wasm
node crates/zolo-wasm-aot/tests/run_wasm.mjs target/aot/01.wasm
# -> Hello from WebAssembly!

Desafío

Añade una segunda llamada a print con el resultado de una operación aritmética simple (ej.: 2 + 2) y recompila con --emit wasm. Confirma que el .wasm generado ejecuta las dos líneas en orden.

Buscar en Zolo

9 resultados

enespt-br