Rolldown: bundler compatible con Rollup escrito en Rust
Motivación de Rolldown
- El proyecto se presenta como “compatible con Rollup en Rust” para corregir dos problemas percibidos: el débil code-splitting en esbuild y la lentitud de las compilaciones en Rollup.
- Los comentaristas señalan que, en la práctica, es el “Rollup de próxima generación” y también una respuesta a rspack, la alternativa a webpack basada en Rust.
- Algunos lo ven como parte de una ola más amplia de Rust en las herramientas de JS (oxc, SWC, LightningCSS, Deno, etc.).
¿Por qué no mejorar simplemente esbuild o Rollup?
- Esbuild: se informa que es muy difícil de extender; varias funciones (bundling, treeshaking, transformaciones) están fuertemente fusionadas en unos pocos pasos del AST, lo que hace que refactorizaciones sustanciales sean difíciles para cualquiera salvo el mantenedor.
- Su code-splitting está limitado por la semántica de los módulos ES y por prioridades del proyecto que favorecen la corrección sobre modos “rápidos pero quizá incorrectos”.
- Rollup: está limitado por ser basado en JS y por un mal aprovechamiento de varios núcleos; mezclar código JS con transformaciones nativas (SWC, esbuild) añade sobrecarga por pasos repetidos de parseo/serialización y cruces de la frontera JS/nativo.
¿Por qué Rust?
- Argumentos a favor de Rust: alto rendimiento, multihilo fácil con seguridad en tiempo de compilación, buena ergonomía para analizadores sintácticos (pattern matching, tipos algebraicos de datos) y un ecosistema coherente con Cargo y crates.io.
- Los críticos sostienen que cualquier lenguaje compilado AOT (Go, C#, C++) podría funcionar; para cargas de trabajo típicas de tooling, el borrow checker de Rust puede ser complejidad innecesaria o llevar al abuso de
.clone(). - Hay un amplio ida y vuelta comparando JS, Go, C++, C# y Rust en rendimiento, seguridad, velocidad de iteración y tooling (Cargo vs CMake, ausencia de un gestor de paquetes para C++, etc.).
Adopción, integración con Vite y preocupaciones del ecosistema
- Rolldown está estrechamente ligado al ecosistema de Vite; se sugiere que sea un reemplazo a largo plazo en Vite, y se menciona una experimentación temprana en materiales de Vite 5.1.
- Algunos temen que un núcleo en Rust reduzca el grupo de colaboradores, ya que la mayoría de los desarrolladores JS/TS no pueden parchearlo fácilmente.
- Otros preguntan si la calidad de salida (legibilidad, bundles no “basura”) igualará a Rollup y si evitará el hacking de cadenas estilo MagicString de Rollup transformando directamente los AST.
Casos de uso y preguntas abiertas
- El chunking se considera importante para cargar dependencias grandes y específicas de rutas, así como imports dinámicos, aunque algunos cuestionan si muchas aplicaciones realmente lo necesitan.
- No está claro cuán pronto Rolldown estará listo para producción en Vite y si unificará por completo el comportamiento de desarrollo y de build (“dev mode as build-plus”).