Introdução: quando o JavaScript não dá conta do recado
\n\nEstamos acostumados que toda a internet se sustenta no JavaScript. Ele é flexível, perdoa erros e funciona em qualquer lugar. Mas existem tarefas onde até o código JS mais otimizado começa a "travar": processamento de vídeo, renderização 3D, algoritmos complexos, jogos. E então entram em cena WebAssembly e Rust — uma dupla que dá às aplicações web a velocidade de código nativo.
\n\nNeste artigo, vamos entender o que é WebAssembly, por que Rust para Wasm é uma das melhores escolhas e como escrever seu primeiro módulo em Rust que funcionará no navegador. O artigo será útil tanto para iniciantes quanto para quem já ouviu falar de Wasm Rust, mas não sabe por onde começar.
\n\nO que é WebAssembly (Wasm)?
\n\nWebAssembly é um formato binário de instruções que é executado no navegador com velocidade próxima à nativa. Simplificando, é uma "CPU virtual" de baixo nível para a web. O navegador carrega um arquivo .wasm compacto e o executa diretamente, ignorando o interpretador JavaScript.
\n\nPrincipais características do Wasm:
\n- \n
- Alto desempenho — o código é executado quase tão rápido quanto C++ ou Rust compilados. \n
- Segurança — Wasm funciona em uma sandbox isolada, assim como o JS. \n
- Compacidade — arquivos .wasm geralmente pesam muito menos que código JS equivalente. \n
- Portabilidade — o mesmo módulo funciona em todos os navegadores modernos. \n
Mas Wasm não substitui o JavaScript. É uma ferramenta para tarefas onde o JS é fraco. Você escreve o código crítico para velocidade em Rust, compila para Wasm, e o JS serve como "cola" que chama esse módulo.
\n\nPor que exatamente Rust para WebAssembly?
\n\nA escolha da linguagem para compilar para Wasm não é crucial. Você pode usar C, C++, Go, até Python (via Pyodide). Mas Rust para WebAssembly se tornou o padrão de facto. Por quê?
\n\n1. Segurança de memória sem coletor de lixo
\nRust é a única linguagem de sistema popular que garante segurança de memória em tempo de compilação. Ao contrário de C/C++, você não terá um segfault em tempo de execução. E a ausência de coletor de lixo (GC) significa que você não tem "congelamentos" repentinos — ideal para aplicações em tempo real.
\n\n2. Abstrações de custo zero
\nVocê escreve código de alto nível com iteradores, closures e traits, mas o compilador Rust o transforma em código de máquina que não fica atrás do assembly escrito à mão. Isso oferece o desempenho do C++ com a conveniência das linguagens modernas.
\n\n3. Ecossistema wasm-pack e wasm-bindgen
\nAs ferramentas para compilação de Rust para Wasm são muito maduras. wasm-pack compila o projeto, gera wrappers JS e até publica o pacote no npm. wasm-bindgen permite transferir facilmente strings, arrays e objetos entre Rust e JavaScript.
4. Tamanho pequeno do arquivo de saída
\nRust compila para Wasm sem runtime. Você obtém um binário mínimo. Mesmo considerando a biblioteca padrão (via wasm-pack), o tamanho raramente ultrapassa 50-100 KB para tarefas reais.
Como funciona: escrevendo nosso primeiro módulo Rust para Wasm
\n\nVamos criar um módulo simples que converte graus Celsius para Fahrenheit e vice-versa. Isso mostrará todo o fluxo: código Rust → Wasm → chamada a partir do JavaScript.
\n\nPasso 1. Instalação das ferramentas
\nVocê precisará do Rust (instale via rustup) e do wasm-pack:
curl https://sh.rustup.rs -sSf | sh\n# Instalação do wasm-pack\ncargo install wasm-pack\n\nPasso 2. Criando o projeto
\ncargo new --lib temp-converter\ncd temp-converter\n\nAbra o Cargo.toml e adicione:
[lib]\ncrate-type = ["cdylib"]\n\n[dependencies]\nwasm-bindgen = "0.2"\n\n