1

A Máquina Virtual

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:

SlangVMFlowsourcearquivo.slanglexerLexer(tokens)source->lexerparserParser(AST)lexer->parsercodegenCodegen(.slasm)parser->codegenvmSlangVM(execucao)codegen->vm

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