Skip to content

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.

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.


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.toml e gera em target/debug/ ou target/release/; com argumento compila o arquivo diretamente
  • soyuz 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) error
  • func typeCheckOnly(inputFile string) error — usado por projetos type = "library"
  • func extractStdlib(tmpDir string) (string, error)
  • func parseFiles(files []string, resolver *module.Resolver) ([]parser.Node, map[parser.Node]string, error)

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()

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)

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()