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”).