La generación de código de Cranelift llega a Rust
Rendimiento en tiempo de compilación frente a LLVM
- Múltiples benchmarks muestran que Cranelift reduce el tiempo total de compilación en ~17–30% en varios proyectos, incluido Rust mismo; en una medición detallada, el ahorro de tiempo de CPU fue de ~40%, con recompilaciones incrementales también más rápidas.
- Algunos usuarios ven solo una mejora marginal en ciertas configuraciones hasta que se tienen en cuenta los efectos de caché (como sccache + NAS).
- Se enfatiza que el tiempo de compilación incluye análisis sintáctico, verificación de tipos, MIR y enlace; la generación de código es solo una parte, así que la Ley de Amdahl limita las ganancias.
- Enlazadores más rápidos (LLD, mold) reducen aún más los tiempos de compilación y, combinados con trabajo paralelo del frontend, las compilaciones de Rust podrían acelerarse de forma sustancial.
Rendimiento en tiempo de ejecución / calidad de la optimización
- Investigaciones anteriores mostraron que Cranelift compilaba mucho más rápido, pero producía código significativamente más lento; quienes comentan dicen que Cranelift ha cambiado mucho desde entonces.
- La expectativa actual: el código de Cranelift suele ser entre 10 y 30% más lento que LLVM, a veces cercano, y es poco probable que iguale sistemáticamente la mejor salida de LLVM/GCC.
- Cranelift se presenta como “lo bastante rápido para desarrollo” más que como un reemplazo directo para compilaciones de lanzamiento de alto rendimiento.
E-graphs y diseño del optimizador
- La discusión contrasta la optimización basada en grafos de equivalencia con las canalizaciones tradicionales de pases.
- Los e-graphs evitan problemas de orden de fases al mantener múltiples representaciones equivalentes y elegir más tarde, pero pueden crecer mucho; Cranelift usa una variante restringida y acíclica con reescrituras tempranas para mantenerse rápido.
- Algunos comentaristas están entusiasmados con los e-graphs como el futuro; otros señalan problemas prácticos aún sin resolver, como las estrategias de extracción y el crecimiento de memoria.
Compilaciones incrementales y caché
- Varios usuarios informan mejoras grandes (a menudo 2–4× más rápidas) en compilaciones incrementales de desarrollo, especialmente al combinar Cranelift con un enlazador rápido.
- Hay interés en una integración más estrecha con sccache y en una caché más granular (por ejemplo, a nivel de MIR) para evitar trabajo redundante en cambios no semánticos.
- Se plantea si esto se superpone con la compilación incremental existente de Rust; no está claro hasta dónde llegan los mecanismos actuales.
ABI, backends y ecosistema
- Se dice que mezclar Cranelift y LLVM dentro de la misma versión del compilador es seguro porque las decisiones de ABI residen en código compartido, agnóstico al backend.
- El soporte de plataformas es incompleto: Windows funciona; macOS arm64 tiene complicaciones en la convención de llamadas y aún no está totalmente soportado.
- Algunos quieren usar Cranelift para lenguajes que no son Rust; las opciones mencionadas incluyen IR textual, enlaces de biblioteca en Rust o alternativas como QBE.
Superoptimización y optimización “máxima”
- El hilo explora por qué los superoptimizadores no son estándar: enorme coste computacional, rendimientos decrecientes, utilidad limitada a pequeños bucles calientes y complejidad de las pruebas de corrección.
- El consenso: los compiladores actuales mejoran el rendimiento lentamente con el tiempo; asignar CPU “ilimitada” a las compilaciones probablemente produzca mejoras modestas en el mundo real.
Sentimiento general
- Muchos están entusiasmados con compilaciones de depuración e incrementales más rápidas y ven Cranelift como un avance importante para la ergonomía de Rust.
- Algunos critican el artículo por ser demasiado positivo y subrayan que LLVM sigue siendo superior para el rendimiento máximo en tiempo de ejecución y para una madurez de plataforma más amplia.