Esta página ainda não foi traduzida para esta versão. A versão em inglês é a referencia autoritária. Ver versão em inglês →

Geração de Código

Backends e redução: Cranelift, nativo, LLVM, GPU e informação de depuração.

Geração de Código (Codegen)

A geração de código é a área onde o Sounio evidencia de forma mais clara a coexistência de múltiplos perfis de compilação. Atualmente, a descrição correta abandonou o antigo pressuposto de que existe apenas um caminho de geração; o repositório distribui agora artefactos separados e estáveis para JIT e GPU, com contratos de backend perfeitamente discriminados.

Mapeamento Atual do Código-Fonte

  • self-hosted/native/ – Responsável pelo rebaixamento nativo (lowering), codificação de instruções, ABI, alocação de registadores e formatos de ficheiros objeto.
  • self-hosted/wasm/ – Abrange o lowering, codificação de opcodes e estruturação de módulos WebAssembly (WASM).
  • self-hosted/gpu/ – Suporte para PTX, SPIR-V, Metal, operações tensoriais e geração de kernels para GPU.
  • self-hosted/llvm/ – Subárvore dedicada à integração com a infraestrutura LLVM.

Capacidades Provadas pelos Artefactos

  • Perfil JIT (Onboarding Padrão): Ativa a compilação em tempo de execução via Cranelift JIT, mantendo os geradores de código LLVM e GPU desativados por omissão para acelerar a inicialização.
  • Perfil GPU (Omega): Disponibiliza a geração de kernels GPU e a emissão de código intermédio PTX diretamente através do comando build --backend gpu.
  • Estratégia de Documentação: Diferencie claramente o comportamento padrão (JIT) das extensões avançadas para GPU e das amplas capacidades estruturais presentes na árvore de código-fonte.

Roteiro Nativo: Preview v2

O repositório disponibiliza uma via de testes pública native-v2, focada no desenvolvimento de um gerador de código autónomo. O antigo intermediário de transição native-v2-shadow foi oficialmente descontinuado. Esta via não se destina a utilização em produção, mas sim a consolidar a infraestrutura de baixo nível:

  • Propósito: Validar as definições do RuntimeContext, as regras de alocação de registadores por arquitetura de destino (target) e o comportamento do Machine IR (Representação Intermédia ao nível da máquina).
  • Mecanismos Ativos (x86-64): Utiliza um fluxo completo de Machine IR e etapas de legalização de tipos, emite ficheiros ELF nativos com o núcleo escalar (scalar_core), expõe o estado do coletor de lixo (gc_state) e a tabela de descritores de objetos geridos pelo RuntimeContext. O acesso ao heap nativo é feito por tabelas estruturadas de apontadores para operações de alocação e indexação, suportado por um modelo rigoroso de Garbage Collection do tipo mark-compact.
  • AArch64: A especificação da arquitetura AArch64 já está mapeada no contrato, mas o emissor nativo correspondente ainda não foi promovido para o perfil de distribuição estável.

Comandos de Verificação dos Backends

export SOUC_BIN="$(pwd)/bin/souc"
"$SOUC_BIN" info

export SOUC_GPU_BIN="$(pwd)/artifacts/omega/souc-bin/souc-linux-x86_64-gpu"
"$SOUC_GPU_BIN" info
"$SOUC_GPU_BIN" build examples/kernel_vec_add.sio --backend gpu -o /tmp/kernel_vec_add.ptx

export SOUNIO_NATIVE_V2_CONTRACT_PATH=/tmp/native_backend_v2_contract.v1.json
"$SOUC_BIN" run self-hosted/compiler/main.sio -- --self-test

O ficheiro de validação formal destas regras reside em artifacts/omega/native_backend_v2_contract.v1.json.