krabby: criando um compilador Rust rápido
(bal-e.org)- Krabby é uma implementação de um compilador Rust do zero com foco em desempenho, criada para melhorar a lentidão de compilação do
rustc - As melhorias perceptíveis de desempenho no
rustcagora tendem a vir de mudanças em APIs e estruturas de dados, e não mais de alterações em funções isoladas; porém, mudanças de grande escala são difíceis por causa do tamanho da base de código e das exigências de estabilidade - O Krabby busca, em uma base de código pequena controlada por uma única pessoa e sem priorizar estabilidade, redesenhar em conjunto os componentes do compilador para encontrar novas oportunidades de otimização e uma arquitetura mais coesa
- O objetivo é testar a hipótese de que, para aumentar significativamente o desempenho de um compilador, é preciso repensar completamente seu design, mesmo em uma linguagem complexa como Rust
- O código está disponível no repositório krabby no Codeberg, e a meta é publicar o progresso no Fediverse pelo menos a cada 1–2 semanas
Objetivos e contexto do Krabby
- Rust é a linguagem preferida do autor, mas o compilador
rustcé visivelmente lento - Muitas pessoas já estão trabalhando para melhorar o desempenho do
rustc, e as otimizações perceptíveis obtidas com mudanças em funções isoladas já estão, em grande parte, próximas do limite do que dava para fazer - Melhorias realmente significativas agora vêm de mudanças em APIs e estruturas de dados, mas em uma base de código grande como a do
rustc, isso se torna praticamente difícil por causa do desenvolvimento simultâneo de vários recursos e das exigências de estabilidade - Krabby é uma implementação de compilador Rust do zero com desempenho como prioridade, e seus objetivos são fundamentalmente diferentes dos do
rustc - Como é uma base de código pequena controlada por uma única pessoa e não prioriza estabilidade, a proposta é projetar todos os componentes considerando como eles se encaixam entre si, buscando novas oportunidades de otimização e uma arquitetura mais coesa
- O projeto parte da hipótese de que, para melhorar de forma expressiva o desempenho de um compilador, é necessário repensar completamente o design do compilador
- A ideia é mostrar que otimizações arquiteturais em grande escala podem estar escondidas independentemente da linguagem-alvo, e que isso pode se aplicar não apenas a linguagens simples como C, mas também a linguagens complexas como Rust
- Mesmo que o design resultante acabe sendo específico para Rust, o processo ainda é visto como valioso pelo que se pode aprender nele
Estado do projeto e materiais públicos
- Krabby é um projeto muito grande, e é difícil ter certeza se será possível concluí-lo ou se o autor é a pessoa certa para isso
- Ainda assim, gostar do processo de otimizar código e elevar seu nível de acabamento, além do prazer de escrever bom código para um objetivo considerado valioso, tem sido a força que move o projeto até agora
- O código está disponível no repositório krabby no Codeberg
- A meta é publicar o progresso no Fediverse pelo menos a cada 1–2 semanas, e atualizações mais longas e aprofundadas serão publicadas no mesmo site
- Quem tiver interesse pode entrar em contato por e-mail
-
Textos relacionados sobre o progresso
- 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 junho de 2025
- krabby: proof of concept: 17 de maio 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 comentários
Comentários do Lobste.rs
Parece que todo mundo quer ter sua própria licença de vaidade https://codeberg.org/bal-e/krabby/…
Essa licença permite uso e compartilhamento gratuitos para fins pessoais e não comerciais, mas exige que o software derivado também seja compartilhado nas mesmas condições, e para fins comerciais só permite um uso de avaliação por 30 dias
Fico curioso se o Codeberg exige critérios rígidos de libre/open source para a licença dos projetos. Eu achava que o Codeberg hospedava apenas FOSS, então essa restrição a uso não comercial me surpreendeu, embora eu possa não estar acompanhando bem a situação mais recente
Rust é grande. Este projeto parece um pouco mais fácil do que “fazer seu próprio navegador”, mas ainda assim não é nem de longe algo fácil. Mesmo assim, valorizo a ambição
Em krabby: motivations, a velocidade parece ser o principal motivo do projeto
Pelo que entendo de Rust, verificação de tipos, borrow checking etc. já são bem rápidos, e o gargalo é a geração de código, grande parte disso ligada ao LLVM mais do que ao próprio Rust
Fico curioso sobre como anda o lado do Cranelift hoje em dia, e se há alguma sobreposição com ideias para acelerar a geração de código
Pessoalmente, estou bem convencido de que isso não faz muito sentido quando se olha para o pipeline de compilação como um todo. Precisamos de rlib só de MIR e de um backend que permita otimizações de mundo inteiro sem exigir RAM infinita (este comentário)
“Codegen Unit” é complexidade puramente acidental
Em especial, a decomposição detalhada de libraries e binaries pode ser interessante
O LLVM não é exatamente rápido, mas, se bem me lembro, também não ajudava o fato de o rustc tender a passar para o LLVM uma IR inflada
Minha meta de médio prazo, ou seja, para os próximos uns 5 anos, é o
cargo check, então não vou mexer na geração de códigoAinda assim, acho que ainda há muito espaço para otimização em paralelismo melhor, separação dos hot paths do código de diagnósticos, redução do trabalho duplicado entre verificação de tipos e borrow checking, melhoria do layout de memória das estruturas de dados centrais e assim por diante
Também ajuda eu ser próximo dos desenvolvedores do rustc e ouvir com frequência sobre vários problemas na base de código