No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Lição 49: WebAssembly (Transmissão Wasm)
1. Narrativa
O mecha Æther pode projetar sua consciência na rede — compilando seu núcleo Rust para WebAssembly e executando no navegador. Wasm é o formato binário portátil que roda em qualquer lugar: navegadores, servidores, dispositivos embarcados. O piloto compila uma vez e transmite para qualquer plataforma.
2. Conceito
WebAssembly (Wasm) é um formato de instrução binário para uma máquina virtual stack-based:
wasm32-unknown-unknown: Target para compilar Rust para Wasmwasm-bindgen: Bridge entre Rust e JavaScriptwasm-pack: Ferramenta para build e publish de crates Wasm- Tipos suportados: i32, i64, f32, f64 — tipos numéricos básicos
- Sem String nativa: Strings requerem manipulação especial via wasm-bindgen
3. Requisitos
- Criar funções compatíveis com Wasm (tipos simples)
- Simular interação com JavaScript
- Entender limitações de tipos em Wasm
- Criar structs que seriam exportadas
4. Design de Dados
graph LR
A[Rust Code] --> B[wasm32 target]
B --> C[.wasm binary]
C --> D[Browser/Node.js]
D --> E[JavaScript API]
5. Diagrama de Fluxo
flowchart TD
A[Escrever Rust] --> B[cargo build --target wasm32]
B --> C[Gerar .wasm]
C --> D[wasm-bindgen]
D --> E[JavaScript glue code]
E --> F[Usar no navegador]
6. Funções
| Função | Descrição |
|---|---|
duplicar_wasm |
Função simples exportável para Wasm |
fibonacci_wasm |
Calcula Fibonacci (intensivo para Wasm) |
soma_array_wasm |
Soma elementos de array (tipos Wasm) |
verificar_par_wasm |
Verifica se número é par |
inverter_array_wasm |
Inverte array in-place |
escalar_vetor_wasm |
Multiplica todos elementos por escalar |
contar_pares_wasm |
Conta elementos pares no array |
StatusMecha |
Struct exportável com dados do mecha |
7. Exemplo
#[no_mangle]
pub extern "C" fn duplicar(x: i32) -> i32 {
x * 2
}
#[no_mangle]
pub extern "C" fn fibonacci(n: i32) -> i32 {
if n <= 1 { return n; }
let (mut a, mut b) = (0, 1);
for _ in 2..=n {
let temp = b;
b = a + b;
a = temp;
}
b
}
8. Missão
- Implementar
duplicar_wasmcom tipos compatíveis - Implementar
fibonacci_wasmpara cálculo intensivo - Implementar
soma_array_wasmprocessando arrays - Implementar
verificar_par_wasmcom retorno bool - Implementar
inverter_array_wasmmodificando array in-place - Implementar
escalar_vetor_wasmmultiplicando por escalar - Implementar
contar_pares_wasmcontando pares - Criar
StatusMechastruct com métodos exportáveis
9. Como Executar
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check
10. Dicas
- Use
#[no_mangle]eextern "C"para exportar funções - Wasm só suporta i32, i64, f32, f64 como tipos de retorno diretos
- Use ponteiros + length para passar arrays entre Rust e JS
wasm-pack build --target webgera módulo ES6wasm-bindgengera o glue code JavaScript automaticamente