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