4 pontos por miniex 2025-11-11 | Ainda não há comentários. | Compartilhar no WhatsApp

Olá, um conhecido meu desenvolveu recentemente um backend de compilador, e achei bem interessante, então estou compartilhando.

  1. 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".

  1. 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.

  1. 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.

  1. Fluxo de uso

Pelo que ele mostrou, o uso é mais ou menos assim:

  1. Fazer o parse da linguagem-fonte e criar a AST
  2. Usar o IRBuilder para converter a AST em Lamina IR
  3. 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.

  1. 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.

Ainda não há comentários.