Skill WASM
Scaffolds e interop de Rust para WebAssembly - uma Skill de Agente para Rust 1.97.0 e implantações em navegador ou WASI.
O Que Esta Skill Faz
Cria crates cdylib com wasm-bindgen, wasm-pack build, código auxiliar JS e perfis de release ajustados para tamanho. Revisa exports #[wasm_bindgen] e hooks de pânico para consoles de navegador.
Quando Invocar
- Portar Rust com uso intensivo de computação para o navegador
- Compartilhar lógica entre CLI nativa e UI web
- Construir módulos WASI para runtimes de edge
- Revisar regressões de tamanho de bundle wasm
Entradas
| Entrada | Por quê |
|---|---|
| Target | wasm32-unknown-unknown vs wasi |
| Framework JS | Bundler bruto vs pacote npm |
| API Exportada | Funções, classes, strings |
| Orçamento de tamanho | Limite de KB para entrega via CDN |
Saídas
Cargo.tomlcomcrate-type = ["cdylib"]- Scripts de build
wasm-pack - Escolha do alocador
wee_allocou padrão documentada - Demo
index.htmlou layout de publicação npmpkg/ - Relatório de tamanho de
twiggyouwasm-objdump
Barreiras de Proteção
- Perfil de release
opt-level = "s"ou"z"para WASM sensível a tamanho. - Evitar pânicos na fronteira - mapear para
Resultnas exportações. - Sem suposições de sistema de arquivos - sandbox do navegador difere do nativo.
console_error_panic_hookcom feature-gate - apenas para desenvolvimento, quando possível.- Testar em CI de navegador headless -
wasm-bindgen-testou smoke test com playwright.
Receita
wasm-pack build --target web --release
wasm-opt -Oz -o pkg/my_module_bg.wasm pkg/my_module_bg.wasmExemplo de Trabalho
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn add(a: u32, b: u32) -> u32 {
a + b
}FAQs
wasm-bindgen vs wasi?
wasm-bindgen para navegadores; WASI para runtimes WASM do lado do servidor.
Posso usar tokio em WASM?
Geralmente não Tokio completo; use wasm-bindgen-futures para async no navegador.
Quão pequenos os bundles podem ficar?
Remova debug, execute wasm-opt, evite importar serde completo quando tipos JS manuais forem suficientes.
Relacionado
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.