- Arenas ou regiões são uma técnica simples e eficaz para compiladores e sistemas semelhantes a compiladores.
- Usar arenas para achatar árvores de sintaxe abstrata (ASTs) pode melhorar o desempenho e oferecer mais praticidade.
- Achatamento significa empacotar nós da AST em um único array e usar índices do array em vez de ponteiros.
- ASTs achatadas oferecem benefícios como melhor localidade, referências menores e alocação e desalocação mais baratas.
- ASTs achatadas podem simplificar o gerenciamento de memória e permitir deduplicação de forma conveniente.
- Os resultados de desempenho mostram que a versão achatada do interpretador pode ser 2,4 vezes mais rápida do que a versão comum.
- É possível melhorar ainda mais o desempenho aproveitando a representação plana da AST para eliminar a recursão e usar varreduras lineares.
- Este artigo discute os ganhos de desempenho obtidos por meio do achatamento de estruturas de dados em um interpretador de linguagem de programação.
- Além disso, o interpretador achatado mostra uma melhora de desempenho de 8,2% em relação ao interpretador recursivo, com 1,2 s contra 1,3 s.
- Na prática, essa técnica reinventa a ideia de um interpretador de bytecode, com a struct
Expr sendo usada como instrução de bytecode.
- Outros textos e projetos sobre achatamento de estruturas de dados são mencionados, incluindo LuaJIT, o verificador de tipos Sorbet e o shell Oil.
- Conceitos semelhantes relacionados a achatamento e otimização de localidade também aparecem em domínios como videogames, processamento de dados serializados, design orientado a dados e sistemas entidade-componente.
- O artigo recomenda também conferir a publicação de Inanna Malick, que aplica a mesma técnica a uma linguagem de "calculadora" de brinquedo implementada em Rust.
- São discutidas limitações do uso dessa técnica em Rust, incluindo a impossibilidade de incluir outras
Expr inline dentro da própria struct Expr.
- A comparação de desempenho foi realizada em um MacBook Pro com processador M1 Max e 32 GB de memória, executando macOS 13.3.1 e Rust 1.69.0.
1 comentários
Comentários no Hacker News