Lamina: backend de compilador multiarquitetura que gera código nativo sem LLVM
(github.com/SkuldNorniern)Olá, um conhecido meu desenvolveu recentemente um backend de compilador, e achei bem interessante, então estou compartilhando.
- Introdução ao projeto
Lamina é um backend de compilador multiarquitetura que gera código nativo diretamente a partir de uma IR baseada em SSA, sem dependências pesadas como o LLVM. Ele oferece suporte a x86_64, AArch64, RISC-V e WebAssembly com uma única IR.
Ele comentou que, toda vez que criava uma DSL simples ou uma linguagem experimental, sentia que era pesado demais compilar o LLVM e gerenciar dependências de vários GB. Então começou com a ideia de "vamos fazer algo leve em que você só coloca a IR e sai assembly".
- Principais características
▸ Zero dependências externas
Converte diretamente da IR para código de máquina, sem LLVM nem Cranelift.
O tempo de build é curto e a distribuição também é simples.
▸ IR baseada em SSA
Como está no formato Static Single Assignment, a composição do pipeline de otimização fica limpa.
▸ Modelo de memória explícito
Diferencia claramente alocação em stack/heap no nível da IR, facilitando a análise de memória.
▸ Multiarquitetura
Suporte a vários alvos com uma única IR:
- x86_64 (Linux, macOS, Windows)
- AArch64/ARM64 (Linux, macOS, Windows)
- RISC-V (RV32/64/128)
- WebAssembly (32/64-bit)
▸ API IRBuilder
Fornece uma API para construir IR em estilo funcional.
Segundo ele, dá para expressar fluxo de controle e operações de memória com segurança de tipos.
- Estado atual
Operações aritméticas básicas, fluxo de controle como condições/desvios/loops, chamadas de função não recursivas e otimizações simples já funcionam.
Ainda não está pronto para produção, mas ele diz que já é suficiente para experimentar como backend de toy languages ou DSLs.
- Fluxo de uso
Pelo que ele mostrou, o uso é mais ou menos assim:
- Fazer o parse da linguagem-fonte e criar a AST
- Usar o IRBuilder para converter a AST em Lamina IR
- O Lamina otimiza e gera código nativo para cada alvo
Se a parte de geração de IR estiver bem implementada, o restante o Lamina cuida sozinho.
- Encerrando.
Pessoalmente, sempre senti que "fazer um backend de compilador" era algo muito distante, então achei impressionante ver um conhecido realmente construindo isso.
Claro que não tem o nível de maturidade nem de otimização do LLVM, mas parece bem interessante para experimentar de forma leve ou usar para fins educacionais.
Eu também cheguei a desenvolver um compilador da linguagem Eom Jun-sik usando o lamina.
Se você se interessou, vale a pena dar uma olhada!
Ainda não há comentários.