Aula 05: Expressões Regulares e Scanners
Objetivos
- Introduzir o WebAssembly como alvo de compilação.
- A arquitetura de pilha do Wasm.
Motivação
Para Engenharia de Computação, o WebAssembly é interessante não só por rodar no navegador, mas porque:
- Define um alvo de compilação padronizado e seguro, com um modelo de execução claro.
- Inspira o design de outras VMs baseadas em pilha e de runtimes portáveis.
- Conecta compiladores tradicionais (C/C++, Rust, Go) com ambientes web e sandboxed.
Conteúdo
WebAssembly (Wasm) é um formato binário de instruções para uma máquina de pilha, pensada para execução segura no navegador e em outros runtimes. Compiladores de C++, Rust, Go e muitas outras linguagens podem gerar Wasm como alvo, permitindo desempenho próximo ao nativo na web.
flowchart LR
Fonte[C/Rust/Go] --> Comp[Compilador]
Comp --> Wasm[Wasm]
Wasm --> Runtime[Runtime navegador]
Runtime --> Exec[Execução]
A Máquina Wasm
É uma Máquina de Pilha Estruturada. - Não tem registradores gerais expostos. Operações consomem valores da pilha e empilham resultados. - i32.add: Desempilha 2, soma, empilha 1. - Memória Linear: Um grande ArrayBuffer de bytes que o programa acessa via índices (load/store). Ponteiros são apenas inteiros (offset nesse array).
Segurança
Wasm foi desenhado com sandboxing: o código não acessa memória fora do seu linear memory; não há acesso direto ao DOM ou ao sistema de arquivos exceto via APIs do host. Isso reduz riscos de buffer overflow e ataques.
Resumo
- Wasm: máquina de pilha, memória linear, tipagem explícita (i32, i64, f32, f64). Compiladores geram Wasm como um alvo; runtimes (navegador, Node, Wasmtime) executam o binário de forma segura e rápida.
Referências
- Aho et al. (2006); Cooper & Torczon (2011). Especificação: webassembly.org.
Materiais da aula
Última atualização: 08/03/2026