Rolldown: bundler compatível com Rollup escrito em Rust
Motivação para o Rolldown
- O projeto se posiciona como “compatível com Rollup em Rust” para corrigir dois problemas percebidos: code-splitting fraco no esbuild e builds lentos no Rollup.
- Comentadores observam que ele é, na prática, a “próxima geração do Rollup” e também uma resposta ao rspack, alternativa baseada em Rust ao webpack.
- Alguns veem isso como parte de uma onda mais ampla de Rust nas ferramentas de JavaScript (oxc, SWC, LightningCSS, Deno, etc.).
Por que não apenas melhorar o esbuild ou o Rollup?
- Esbuild: é descrito como muito difícil de estender; vários recursos (bundling, treeshaking, transforms) estão fortemente integrados em poucas passagens de AST, o que torna refatorações substanciais difíceis para qualquer pessoa além do mantenedor.
- Seu code-splitting é limitado pela semântica dos módulos ES e por prioridades do projeto que favorecem a correção em vez de modos “rápidos, mas talvez errados” e arriscados.
- Rollup: limitado por ser baseado em JS com mau aproveitamento de múltiplos núcleos; misturar código JS com transforms nativos (SWC, esbuild) adiciona overhead de passos repetidos de parse/serialize e de travessias da fronteira JS/nativo.
Por que Rust?
- Argumentos a favor de Rust: bom desempenho, multithreading fácil com segurança em tempo de compilação, boa ergonomia para parsers (pattern matching, tipos algébricos) e um ecossistema coeso com Cargo e crates.io.
- Críticos argumentam que qualquer linguagem compilada AOT (Go, C#, C++) poderia funcionar; para cargas de trabalho típicas de ferramentas, o borrow checker do Rust pode ser complexidade desnecessária ou levar ao abuso de
.clone(). - Há uma longa troca de argumentos comparando JS, Go, C++, C# e Rust em desempenho, segurança, velocidade de iteração e ferramentas (Cargo vs CMake, ausência de gerenciador de pacotes para C++, etc.).
Adoção, integração com Vite e preocupações com o ecossistema
- O Rolldown está fortemente ligado ao ecossistema Vite; sugere-se que ele seja um substituto de longo prazo no Vite, com menção a experimentações iniciais em materiais do Vite 5.1.
- Alguns temem que um core em Rust reduza o grupo de contribuidores, já que a maioria dos devs de JS/TS não consegue corrigir isso facilmente.
- Outros perguntam se a qualidade da saída (legibilidade, bundles não “lixo”) vai igualar a do Rollup e se ele evitará o estilo MagicString de manipulação de strings do Rollup ao transformar ASTs diretamente.
Casos de uso e perguntas em aberto
- O chunking é visto como importante para carregar dependências grandes, específicas de rotas, e imports dinâmicos, embora alguns questionem se muitos apps realmente precisam disso.
- Não está claro quão cedo o Rolldown estará pronto para produção no Vite e se ele irá unificar totalmente o comportamento de dev e build (“dev mode as build-plus”).