Mejoré mis tiempos de compilación de Rust

Tiempos de compilación de Rust y velocidad de iteración

  • Muchos coinciden en que las compilaciones de Rust siguen siendo lentas: incluso después de una mejora del 75%, algunos consideran que 4–5 s incrementales en una máquina potente es demasiado, especialmente para sitios estáticos pequeños.
  • Otros consideran aceptables esos 4–5 s y destacan el valor de las fuertes garantías de Rust en tiempo de compilación frente al HMR (hot module reload) rápido pero propenso a errores en JS/TS.
  • Algunos informan de proyectos que tardan minutos en compilar en hardware modesto, preocupados de que Rust en la práctica requiera máquinas caras y pueda frenar su adopción.
  • Varios participantes subrayan que los ciclos cortos de editar–ejecutar (1–2 s) afectan mucho a la productividad; otros argumentan que en Rust el bucle principal es “editar, esperar a rust-analyzer”, reduciendo la dependencia de compilaciones completas, aunque se informa que rust-analyzer es lento en repositorios grandes.

Hardware: CPU vs RAM vs almacenamiento

  • Los benchmarks compartidos en el hilo indican que el tiempo de compilación escala con el número de núcleos; más RAM por encima de ~1 GB por compilación no ayuda a las crates típicas, aunque la velocidad de la memoria sí podría hacerlo.
  • Se considera que las máquinas con mucha RAM (64–128 GB) son excesivas para Rust específicamente, pero útiles para VM, sanitizers y LLM locales.
  • Las experiencias con la presión de RAM difieren: algunos usuarios de Linux se topan con OOM y reinicios forzados con 32 GB, mientras que otros dicen que el uso de memoria en Linux es eficiente si se configura (swap, zram, etc.). Las causas se discuten y no están claras.
  • El precio de la RAM en portátiles es un tema polémico; la RAM soldada y las marcas premium hacen que 32 GB sea caro, pero los portátiles ampliables o no premium pueden ser más baratos.

Herramientas: enlazadores, cachés, backends

  • En la discusión de mold/sold, sold es esencialmente mold bajo una licencia comercial; mold ahora tiene una licencia permisiva, pero todavía no admite macOS. El nuevo enlazador paralelizado de Apple, según se informa, es lo bastante rápido como para que sold quede en gran medida obsoleto.
  • Cranelift como backend alternativo puede acelerar las compilaciones (afirmaciones anecdóticas de mejoras del 20–30%), pero algunos consideran que eso es modesto en relación con la lentitud general.
  • Las sugerencias incluyen usar sccache y firebuild; firebuild puede cachear el enlazado y los scripts de compilación, y afirma mejoras de más del 90% en algunas compilaciones de Rust (el soporte para Mac es experimental).
  • La opción separate-front-target-dir de cargo-leptos ahora está siempre habilitada y está obsoleta como opción de usuario.

Compromisos de diseño del lenguaje y del compilador

  • Varios comentarios señalan que el borrow checker aporta poco al tiempo de compilación; los principales culpables son la monomorfización y la expansión de macros, que generan grandes cargas de trabajo para LLVM pero producen código rápido en ejecución.
  • La unidad de compilación de Rust es una crate (lo que permite dependencias circulares intra-crate), lo que limita la paralelización en comparación con C/C++, donde cada archivo fuente es una unidad.
  • Algunos sostienen que Rust adelanta el esfuerzo (tipos estrictos, ownership) para reducir la depuración en tiempo de ejecución; otros responden que sobreinvertir en tipos antes de ver el comportamiento puede desperdiciar tiempo y que la iteración rápida en tiempo de ejecución sigue siendo crucial.
  • Los observadores señalan años de trabajo constante pero incremental en la velocidad del compilador; ahora los perfiles están “planos”, lo que implica que la mayoría de las mejoras fáciles ya se agotaron y que grandes avances adicionales pueden requerir cambios arquitectónicos profundos.

Flujo de trabajo de front-end y plantillas

  • Los desarrolladores de front-end debaten si Rust encaja con la iteración rápida de UI: las reconstrucciones largas se consideran inaceptables para retoques rápidos de CSS o marcado.
  • Otros responden que la seguridad de Rust “merece la espera”, especialmente frente al JS heredado, donde muchos errores solo aparecen en tiempo de ejecución.
  • Un comentarista cuestiona por qué las ediciones de plantillas HTML desencadenan recompilaciones completas de Rust, sugiriendo usar plantillas externas o un diseño que no requiera recompilación; los detalles de la configuración del artículo no están claros.

Otros puntos de la discusión

  • Algunos quisieran que el artículo hubiera mencionado sccache explícitamente.
  • Hay curiosidad por benchmarks de CPU específicamente para compilar Rust; se mencionan phoronix/openbenchmarking como fuentes relevantes.
  • Las imágenes de héroe generadas por IA en blogs son ampliamente criticadas por distraer y por no indicarse con claridad; varios admiten que se detuvieron a inspeccionar artefactos en lugar de leer.