run vs build
Nesta página
O Zolo oferece dois modos principais de execução. zolo run interpreta o
programa diretamente na VM — ideal para scripts, iteração rápida e para
recursos que dependem do prelúdio da VM (signals, schemas, effects, channels,
máquinas de estado). zolo build compila via Cranelift e produz um
executável nativo real para a plataforma do host; não há Lua nem VM no
binário de saída.
O mesmo programa funciona nos dois backends, desde que não use recursos exclusivos da VM:
zolo run interpreta; zolo build emite um binário nativo. Saída idêntica em ambos.
// Feature: the two backends — VM (`zolo run`) vs native (`zolo build`)
// Syntax: `zolo run file.zolo` | `zolo build file.zolo`
// When to use: `run` for scripts, REPL-speed iteration, and VM-only
// features (signals, schemas, effects, comptime-emit, channels,
// machines). `build` for a standalone native executable.
// This program runs identically on both backends:
//
// zolo run 30-compilation/01-run-vs-build.zolo # interpreted (VM)
// zolo build 30-compilation/01-run-vs-build.zolo # native binary (Cranelift)
// ./01-run-vs-build # then run the binary
//
// `zolo build` with no `--emit` defaults to a NATIVE executable compiled
// through Cranelift. There is no Lua/VM in the output — it is a real
// machine-code binary linked for the host platform.
let answer = 6 * 7
print("the answer is", answer)
// Gotcha: the native backend has no VM prelude. Globals the VM installs
// (signals, schemas, effects, channels, `machine`) are NOT available when
// you `zolo build`. Use `zolo run` for those. See the README capability
// matrix for the full VM-only list.
//
// expected (either backend):
// the answer is 42
Requer a CLI/host do Zolo — abra no playground ou rode localmente.
Atenção: o backend nativo não carrega o prelúdio da VM. Globais como
signal,schema,effect,machineesend/recvnão existem no executável nativo — chamá-los retornarianilem silêncio. Usezolo rundurante o desenvolvimento ezolo buildpara distribuir o binário final.
Desafio
Adicione uma chamada a signal(0) ao exemplo e tente zolo build. O que
acontece? Remova-a e repita o build — observe a diferença.
Veja também