A Máquina Virtual do Slang1.1
A SlangVM é uma máquina virtual de pilha usada como alvo final do compilador didático de Slang.
Em vez de gerar código de máquina real para x86, ARM ou RISC-V, o compilador gera um assembly textual simples, com extensão sugerida .slasm. Esse assembly é executado por um programa separado chamado slang-vm.
O fluxo final fica assim:
Na prática:
./build/compiler code programa.slang > programa.slasm
./build/slang-vm programa.slasm
Por que uma VM de pilha?1.1.1
Uma VM de pilha simplifica a geração de código. O compilador não precisa decidir qual registrador usar para cada valor temporário. Ele apenas emite instruções que empilham operandos e consomem esses operandos na ordem correta.
Por exemplo, a expressão:
1 + 2 * 3
pode ser gerada como:
push 1
push 2
push 3
mul
add
O resultado final fica no topo da pilha.
Frames e variáveis locais1.1.2
Cada chamada de função cria um frame. Dentro desse frame, os parâmetros e variáveis locais são guardados em slots numéricos.
Exemplo:
fn dobro(n: int) -> int {
return n * 2
}
O parâmetro n ocupa o slot local 0:
label fn_dobro
get_local 0
push 2
mul
ret
Binários da VM1.1.3
| Versão | Sistema | Download |
|---|---|---|
| v1.0 | Linux | VM-v1.0.bin |
| v1.0 | Windows | VM-v1.0.exe |