krabby: crear un compilador de Rust rápido
(bal-e.org)- Krabby es una implementación de un compilador de Rust desde cero y orientado al rendimiento, que busca mejorar la lenta velocidad de compilación de
rustc - Las mejoras perceptibles de rendimiento en
rustcahora provienen más de cambios en APIs y estructuras de datos que de modificar una sola función, pero los cambios a gran escala son difíciles por el tamaño del código base y los requisitos de estabilidad - Krabby busca rediseñar juntos los componentes del compilador en un código base pequeño controlado por una sola persona, sin priorizar la estabilidad, para encontrar nuevas oportunidades de optimización y una arquitectura más cohesionada
- El objetivo es poner a prueba, incluso en un lenguaje tan complejo como Rust, la hipótesis de que para mejorar de forma importante el rendimiento de un compilador hay que replantear por completo su diseño
- El código está publicado en el repositorio de krabby en Codeberg, y el objetivo es publicar avances en Fediverse al menos una vez cada 1 o 2 semanas
Objetivos y contexto de Krabby
- Rust es el lenguaje preferido del autor, pero el compilador
rustces notablemente lento - Ya hay muchas personas trabajando en mejorar el rendimiento de
rustc, y las mejoras que pueden elevar de forma perceptible el rendimiento cambiando una sola función están casi todas implementadas - Las mejoras significativas ahora vienen de cambios en APIs y estructuras de datos, pero en un código base grande como
rustc, los cambios amplios son en la práctica difíciles por el desarrollo simultáneo de múltiples funciones y por los requisitos de estabilidad - Krabby es una implementación de compilador de Rust desde cero con prioridad en el rendimiento, y sus objetivos son fundamentalmente distintos de los de
rustc - Como se trata de un código base pequeño controlado por una sola persona y que no prioriza la estabilidad, el enfoque es diseñar todos los componentes teniendo en cuenta su relación mutua para encontrar nuevas oportunidades de optimización y construir una arquitectura más cohesionada
- Parte de la hipótesis de que, para mejorar de forma importante el rendimiento de un compilador, es necesario replantear por completo su diseño
- También busca mostrar que las optimizaciones arquitectónicas a gran escala pueden estar ocultas sin importar el lenguaje objetivo, y que esto puede aplicarse no solo a lenguajes simples como C, sino también a uno tan complejo como Rust
- Incluso si el diseño resultante termina estando especializado para Rust, considera que lo aprendido en el proceso tendrá valor
Estado del proyecto y materiales públicos
- Krabby es un proyecto muy grande, y es difícil estar seguro de si podrá completarse o de si el autor es la persona adecuada para hacerlo
- Aun así, el gusto por optimizar código y por llevarlo a un mayor nivel de acabado, junto con el disfrute de escribir buen código para un objetivo que considera valioso, han sido el motor del proyecto hasta ahora
- El código está publicado en el repositorio de krabby en Codeberg
- El objetivo es publicar avances en Fediverse al menos una vez cada 1 o 2 semanas, y publicar actualizaciones más extensas y profundas en el mismo sitio
- Quien tenga interés puede contactarlo por correo
-
Publicaciones relacionadas sobre el avance
- identifier interning in 2025: 20 de abril de 2026
- a year of krabby: 12 de abril de 2026
- introducing
takeaway: 11 de agosto de 2025 - krabby: for context: 1 de junio de 2025
- krabby: proof of concept: 17 de mayo de 2025
- krabby: the architecture: 27 de abril de 2025
- krabby: making an AST: 19 de abril de 2025
- krabby: trying out parent ptrs: 12 de abril de 2025
- krabby: motivations: 5 de abril de 2025
1 comentarios
Opiniones en Lobste.rs
Parece que todos quieren tener su propia licencia de vanidad https://codeberg.org/bal-e/krabby/…
Esta licencia permite gratis el uso y la distribución con fines personales y no comerciales, pero también exige que el software construido sobre ella se comparta bajo las mismas condiciones, y para fines comerciales solo permite una prueba de 30 días
Me pregunto si Codeberg exige condiciones estrictas de libre/open source para las licencias de los proyectos. Tenía entendido que Codeberg solo hospeda FOSS, así que la restricción de uso no comercial me sorprendió, aunque puede que no esté al día con la situación actual
Rust es grande. Este proyecto parece un poco más fácil que “hacer tu propio navegador web”, pero de ninguna manera es algo fácil. Aun así, valoro que apunte alto
Al ver krabby: motivations, parece que la velocidad es la razón principal de este proyecto
Según mi entendimiento de Rust, la verificación de tipos, la verificación de préstamos y demás ya son muy rápidas, y el cuello de botella está en la generación de código; una parte importante de eso está relacionada con LLVM más que con Rust en sí
Me da curiosidad cómo va hoy en día lo de Cranelift y si se cruza con ideas para acelerar la generación de código
Personalmente, estoy bastante convencido de que eso no tiene mucho sentido si miras todo el pipeline de compilación. Hace falta un rlib solo para MIR y un backend que pueda hacer optimización de mundo completo sin necesitar RAM infinita (ver este comentario)
“Codegen Unit” es complejidad puramente accidental
En particular, puede ser interesante el desglose concreto de libraries y binaries
LLVM no es precisamente rápido, pero si mal no recuerdo, tampoco ayudaba que rustc tiende a pasarle a LLVM un IR algo inflado
Mi objetivo a mediano plazo, o sea durante unos 5 años, es
cargo check, así que no voy a tocar la generación de códigoAun así, creo que todavía hay mucho margen de optimización en mejor paralelismo, separar las rutas calientes del código de diagnósticos, reducir el trabajo duplicado entre la verificación de tipos y la verificación de préstamos, mejorar la disposición en memoria de las estructuras de datos clave, etc.
También ayuda que tengo cercanía con desarrolladores de rustc y suelo escuchar seguido sobre varios problemas del codebase