- Cranelift é um backend de geração de código sob licença Apache-2.0, desenvolvido como parte do runtime Wasmtime para WebAssembly
- Em outubro de 2023, o projeto Rust começou a oferecer o Cranelift como um componente opcional da toolchain nightly
- Agora, os usuários podem usar o Cranelift como backend de geração de código para builds de depuração de projetos escritos em Rust
- O Cranelift concorre com compiladores existentes e gera código mais rapidamente graças a um design simplificado que prioriza apenas otimizações importantes
A importância do tempo de compilação
- Usuários de linguagens de programação querem tempos de compilação rápidos
- Assim como outras linguagens que usam LLVM, Rust também recebeu reclamações sobre o tempo de compilação
- Um compilador que gere código com rapidez suficiente pode ser mais vantajoso do que usar um interpretador
- Um compilador focado em velocidade de compilação pode ter grande valor
As otimizações do Cranelift
- O Cranelift realiza otimizações de várias formas durante a geração de código
- O pipeline de otimização é baseado em E-graphs, uma estrutura de dados que representa de forma eficiente conjuntos de representações intermediárias
- Em compiladores tradicionais, a ordem das otimizações afeta fortemente a qualidade do código gerado
- O Cranelift usa E-graphs para que a ordem das otimizações não afete o resultado
- Extrair a representação final de um E-graph é um problema NP-completo, mas o Cranelift usa heurísticas para extrair rapidamente uma representação boa o suficiente
Cranelift para Rust
- Foi necessário um esforço considerável para usar o Cranelift como backend do Rust
- O compilador Rust usa uma IR de nível intermediário para representar programas com checagem de tipos
- Para usar o Cranelift, foi necessária uma biblioteca que convertesse essa IR de nível intermediário em CLIF
- Essa biblioteca foi escrita principalmente por "bjorn3", membro da equipe do compilador Rust
- Os usuários podem testar o backend Cranelift usando rustup e cargo
Opinião do GN⁺
- A adoção do Cranelift pode ser vista como uma resposta à demanda contínua da comunidade Rust por tempos de compilação menores. Isso pode contribuir para aumentar a produtividade dos desenvolvedores.
- A abordagem do Cranelift para resolver o problema da ordem das otimizações com o uso de E-graphs apresenta um novo paradigma no design de compiladores. Isso pode indicar novos rumos para pesquisa e desenvolvimento de compiladores.
- De um ponto de vista crítico, ainda é necessário validar, por meio de mais casos reais de uso, o quão estável e eficiente o Cranelift é em comparação com o LLVM.
- Outros backends de compilador com funções semelhantes ao Cranelift incluem o libgccjit do GCC, e comparações com essas alternativas podem ajudar a entender com mais clareza os pontos fortes e fracos do Cranelift.
- Desenvolvedores que adotarem o Cranelift devem considerar a compatibilidade com a infraestrutura existente baseada em LLVM e os custos de transição, além de avaliar cuidadosamente o desempenho e a estabilidade do Cranelift.
1 comentários
Opiniões no Hacker News