Compiladores de Delégua

May 10, 2026 · View on GitHub

Monorepositório com todos os compiladores completos da linguagem de programação Delégua, com o objetivo de gerar código nativo eficiente e otimizado para diversas plataformas.

Pacotes

PacoteDescrição
@designliquido/delegua-llvmGeração de representação intermediária LLVM (IR) a partir de código Delégua
delegua-nativoCompilação completa Delégua → LLVM IR → binário nativo via Clang
delegua-x64Compilação Delégua → NASM assembly → binário nativo x64, sem LLVM
delegua-armCompilação Delégua para binários ARM via GNU Assembler, sem LLVM
delegua-risc-vCompilação Delégua para binários RISC-V via GNU Assembler, sem LLVM
delegua-wasmCompilação Delégua para WebAssembly via WAT e wat2wasm, sem LLVM

Pré-requisitos

Os pré-requisitos adicionais variam conforme o pacote utilizado:

PacoteFerramentas necessárias
delegua-nativoLLVM (clang, clang++; opt e llc opcionais)
delegua-x64NASM + ld (Linux) ou gcc (Windows)
delegua-armGNU Assembler (as) + ld para ARM
delegua-risc-vGNU Assembler (as) + ld para RISC-V
delegua-wasmwat2wasm (wabt)

Desenvolvimento

Estrutura do monorepo

pacotes/
├── delegua-nativo/         Compilador completo com toolchain Clang/LLVM
│   └── fontes/
│       ├── verificador-toolchain.ts   Detecção de ferramentas no PATH
│       ├── compilador-nativo.ts       Pipeline de compilação
│       ├── ilc.ts                     Ponto de entrada da CLI
│       └── index.ts                   Exportações da biblioteca
├── delegua-x64/            Compilador via NASM para x64, sem LLVM
│   └── fontes/
│       ├── verificador-toolchain.ts   Detecção de nasm/ld/gcc no PATH
│       ├── compilador-x64.ts          Pipeline de compilação
│       ├── ilc.ts                     Ponto de entrada da CLI
│       └── index.ts                   Exportações da biblioteca
├── delegua-arm/            Compilador via GNU Assembler para ARM, sem LLVM
│   └── fontes/
│       ├── verificador-toolchain.ts   Detecção de as/ld no PATH
│       ├── compilador-arm.ts          Pipeline de compilação
│       ├── ilc.ts                     Ponto de entrada da CLI
│       └── index.ts                   Exportações da biblioteca
├── delegua-risc-v/         Compilador via GNU Assembler para RISC-V, sem LLVM
│   └── fontes/
│       ├── verificador-toolchain.ts   Detecção de as/ld no PATH
│       ├── compilador-riscv.ts        Pipeline de compilação
│       ├── ilc.ts                     Ponto de entrada da CLI
│       └── index.ts                   Exportações da biblioteca
└── delegua-wasm/           Compilador para WebAssembly via WAT e wat2wasm
    └── fontes/
        ├── verificador-toolchain.ts   Detecção de wat2wasm no PATH
        ├── compilador-wasm.ts         Pipeline de compilação
        ├── ilc.ts                     Ponto de entrada da CLI
        └── index.ts                   Exportações da biblioteca

Instalação das dependências

yarn

Empacotamento

yarn empacotar

Testes

yarn testes-unitarios

Publicação no npm com release-it

O repositório está configurado para usar release-it com o plugin @release-it-plugins/workspaces, publicando todos os pacotes em pacotes/* que não estejam com "private": true.

  1. Faça login no npm:
npm login
  1. Execute um teste sem publicar:
yarn release:dry-run
  1. Execute a release interativa:
yarn publicar

Em CI/CD, use o modo não interativo:

yarn publicar:ci

Notas:

  • Cada pacote precisa ter name, version e permissão para publicação no npm.
  • O script prepublishOnly de cada pacote deve preparar o artefato antes do npm publish.
  • O pacote raiz do monorepo não é publicado ("npm": false na configuração do release-it).

Contribuindo

  • Nomes de variáveis, comentários e documentação devem estar em português, pois o projeto é em português.
  • Utilize o Yarn como gerenciador de pacotes. Não utilize o npm diretamente.