Entrypoints
O diretório cmd/ contém os pontos de entrada para o binário principal do compilador e para as diversas ferramentas de suporte e depuração.
Visão Geral do Módulo
Section titled “Visão Geral do Módulo”Cada subdiretório em cmd/ representa um binário independente ou uma funcionalidade de alto nível do ecossistema Soyuz. O binário principal (soyuz) orquestra toda a pipeline de compilação, enquanto ferramentas como lsp e diag provêm infraestrutura para desenvolvedores.
Arquivos do Módulo
Section titled “Arquivos do Módulo”cmd/main.go
Section titled “cmd/main.go”O que faz: Implementa os comandos soyuz new, soyuz build e soyuz run. Orquestra todas as fases: extração do runtime/stdlib, resolução de módulos, parse, check, codegen e a invocação final do clang.
Comandos:
soyuz new [--lib] <nome>— cria scaffold de projeto (binary ou library)soyuz build [--release] [arquivo.sy]— sem argumento lêsoyuz.tomle gera emtarget/debug/outarget/release/; com argumento compila o arquivo diretamentesoyuz run [--release] [arquivo.sy] [-- args...]— compila para temp dir, executa, apaga
Principais Assinaturas:
func main()func cmdNew(args []string)func cmdBuild(args []string)func cmdRun(args []string)func buildInternal(inputFile, outputFile string, release bool, projectRoot string) errorfunc typeCheckOnly(inputFile string) error— usado por projetostype = "library"func extractStdlib(tmpDir string) (string, error)func parseFiles(files []string, resolver *module.Resolver) ([]parser.Node, map[parser.Node]string, error)
cmd/lsp/main.go
Section titled “cmd/lsp/main.go”O que faz: Inicia o servidor de linguagem (Language Server Protocol).
Como é usado: Chamado pelo editor de texto (como VSCode ou Neovim). Ele utiliza a biblioteca glsp para se comunicar via stdio. Configura o log para ser silencioso no stderr para evitar conflitos com a captura de logs dos editores.
Principais Assinaturas:
func main()
cmd/diag/main.go
Section titled “cmd/diag/main.go”O que faz: Uma ferramenta de diagnóstico de performance do compilador.
Como é usado: Roda a pipeline completa e imprime no stderr timestamps detalhados de quando cada fase (resolve, parse, check, codegen) começou e terminou.
Principais Assinaturas:
func phase(name string, fn func() error)
cmd/dumpir/main.go
Section titled “cmd/dumpir/main.go”O que faz: Ferramenta utilitária para inspecionar o LLVM IR gerado para um snippet de código fixo.
Como é usado: Útil para desenvolvedores do compilador que precisam verificar rapidamente se uma mudança no codegen está produzindo o IR esperado sem precisar rodar um build completo de arquivo.
Principais Assinaturas:
func main()