Flags --emit
En esta página
zolo build recorre un pipeline completo por defecto:
.zolo ──parse/typeck──▶ AST ──lower──▶ ZoloIR ──Cranelift──▶ .o ──link──▶ binario
│ --emit ir │ --emit obj (defecto)
El flag --emit permite detenerse en cualquier etapa intermedia.
--emit ir
--emit ir imprime la representación intermedia textual (ZoloIR) en stdout
en lugar de producir un binario. Nada se escribe en disco. Útil para entender
cómo se baja una construcción antes del codegen o para depurar el compilador:
zolo build --emit ir muestra el ZoloIR de la función double y de la llamada a print.
// Feature: inspect ZoloIR — `zolo build --emit ir`
// Syntax: `zolo build file.zolo --emit ir`
// When to use: see the intermediate representation the native backend
// lowers to before codegen — handy for debugging codegen or learning
// how a construct compiles.
// Run:
// zolo build 30-compilation/02-emit-ir.zolo --emit ir
//
// `--emit ir` prints the textual ZoloIR to stdout instead of producing
// a binary. Nothing is written to disk.
fn double(n: int) -> int {
return n * 2
}
print(double(21))
// Abbreviated IR for the `print(double(21))` call:
//
// ; ZoloIR Module
// ; String pool:
// ; s0 = "print"
// fn @__entry() -> val {
// entry:
// %0 = get_global "print"
// %1 = call @double(21)
// %2 = call %0(%1)
// return
// }
//
// expected (when run normally): 42
Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.
--emit obj
--emit obj compila el código hasta el archivo objeto (.o/.obj) y se
detiene antes de la etapa de enlazado — no se produce ningún ejecutable. El
archivo se escribe junto al fuente. Útil para integración con toolchains
externas y experimentos de FFI:
zolo build --emit obj escribe 03-emit-obj.o y termina antes del enlazado.
// Feature: object file without linking — `zolo build --emit obj`
// Syntax: `zolo build file.zolo --emit obj`
// When to use: produce a `.o`/`.obj` to hand to an external linker, or
// to inspect the generated machine code without a full link step.
// Run:
// zolo build 30-compilation/03-emit-obj.zolo --emit obj
// # -> Wrote 03-emit-obj.o
//
// `--emit obj` writes the compiled object file next to the source and
// stops before linking — no executable is produced. Useful for FFI
// experiments and toolchain integration.
let xs = [1, 2, 3, 4]
var total = 0
for x in xs {
total += x
}
print("sum =", total)
// expected (when run): sum = 10
Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.
Desafío
Usa --emit ir en el ejemplo de 03-emit-obj.zolo y observa cómo aparece el
bucle for en el IR. ¿En qué se diferencia de una llamada a función normal?
Consulta también