No description
Find a file
2026-09-01 13:11:03 +02:00
.woodpecker chore: migrate CI to .woodpecker/{push,branch}.yml 2026-09-01 13:11:03 +02:00
src initial content 2026-09-01 13:11:01 +02:00
tests initial content 2026-09-01 13:11:01 +02:00
.gitignore Initial commit 2026-09-01 11:10:38 +00:00
Cargo.lock initial content 2026-09-01 13:11:01 +02:00
Cargo.toml chore: declare MSRV 1.85 (edition 2024) 2026-09-01 13:11:03 +02:00
LICENSE chore: add AGPL-3.0 license and standard .gitignore 2026-09-01 13:11:03 +02:00
README.md initial content 2026-09-01 13:11:01 +02:00

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 Wasm
  • wasm-bindgen: Bridge entre Rust e JavaScript
  • wasm-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

  1. Implementar duplicar_wasm com tipos compatíveis
  2. Implementar fibonacci_wasm para cálculo intensivo
  3. Implementar soma_array_wasm processando arrays
  4. Implementar verificar_par_wasm com retorno bool
  5. Implementar inverter_array_wasm modificando array in-place
  6. Implementar escalar_vetor_wasm multiplicando por escalar
  7. Implementar contar_pares_wasm contando pares
  8. Criar StatusMecha struct com métodos exportáveis

9. Como Executar

cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check

10. Dicas

  • Use #[no_mangle] e extern "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 web gera módulo ES6
  • wasm-bindgen gera o glue code JavaScript automaticamente