CLI do Soyuz
O Soyuz vem com um toolchain integrado: um único binário soyuz cobre a criação de projetos, compilação e execução.
Instalação
Section titled “Instalação”Binário pré-compilado (Linux x64)
Section titled “Binário pré-compilado (Linux x64)”Baixe o soyuz-linux-x64 na página de Releases e mova para o PATH:
chmod +x soyuz-linux-x64sudo mv soyuz-linux-x64 /usr/local/bin/soyuzBuild da source
Section titled “Build da source”git clone https://github.com/VandeJr/soyuzcd soyuzmake build # gera ./soyuz e ./soyuz-lspmake install # instala em ~/.local/bin por padrãosoyuz new
Section titled “soyuz new”Cria um projeto Soyuz com a estrutura mínima necessária.
soyuz new <nome> # projeto binário (executável)soyuz new --lib <nome> # projeto bibliotecaProjeto binário — gera:
Directoryhello/
- soyuz.toml
- main.sy
Projeto biblioteca — gera:
Directorymylib/
- soyuz.toml
- lib.sy
soyuz.toml gerado
Section titled “soyuz.toml gerado”[project]name = "hello"version = "0.1.0"type = "binary" # ou "library"entry = "main.sy"
[packages]# aliases para imports locais (ver Módulos)soyuz build
Section titled “soyuz build”Compila o projeto ou um arquivo avulso.
Modo projeto (sem argumento)
Section titled “Modo projeto (sem argumento)”Execute dentro de um diretório que contenha soyuz.toml:
soyuz build # debug → target/debug/<name>soyuz build --release # release → target/release/<name>O output segue a estrutura:
Directoryhello/
Directorytarget/
Directorydebug/
- hello
Directoryrelease/
- hello
Para projetos do tipo library, soyuz build executa apenas a verificação de tipos — nenhum executável é gerado:
Biblioteca 'mylib' v0.1.0 verificada com sucesso.Modo arquivo (legado)
Section titled “Modo arquivo (legado)”soyuz build [-o saída] <arquivo.sy>soyuz build main.sy # output: ./outputsoyuz build -o meu_app main.sy # output: ./meu_appFlag --release
Section titled “Flag --release”Ativa -O2 no Clang. Útil para distribuição; desnecessário durante o desenvolvimento.
soyuz run
Section titled “soyuz run”Compila para um diretório temporário, executa o binário e apaga em seguida.
soyuz run # usa entry do soyuz.tomlsoyuz run <arquivo.sy> # compila e executa um arquivo avulsosoyuz run --release # build otimizado antes de executarsoyuz run <arquivo.sy> -- arg1 arg2 # passa argumentos ao programaExemplo
Section titled “Exemplo”# Criar projeto, rodar e verificar argumentossoyuz new demo && cd demosoyuz run -- alpha betaimport @soyuz/prelude
fn main() { val a = args() print("recebeu $(a.size()) argumentos")}soyuz.toml — referência completa
Section titled “soyuz.toml — referência completa”[project]name = "minha-app" # nome do projeto e do binário geradoversion = "0.1.0" # semver livre — apenas documentação por enquantotype = "binary" # "binary" | "library"entry = "main.sy" # arquivo de entrada (relativo à raiz do projeto)
[packages]# Define aliases para o sistema de imports.# utils = "lib/utils" → import { ... } from @utils/moduloutils = "lib/utils"http = "lib/http"Aliases de packages
Section titled “Aliases de packages”Com [packages] definido, você usa @<alias>/<modulo> nos imports:
import ( { soma } from @utils/math { GET } from @http/client)Descoberta do projeto
Section titled “Descoberta do projeto”O compilador busca o soyuz.toml subindo pelos diretórios a partir do arquivo de entrada — o mesmo comportamento de ferramentas como cargo ou go. Você pode rodar soyuz build de qualquer subdiretório do projeto.
FFI — arquivos C no projeto
Section titled “FFI — arquivos C no projeto”Coloque arquivos .c em um diretório runtime/ na raiz do projeto. Eles são automaticamente compilados e linkados com o programa:
Directoryminha-app/
- soyuz.toml
- main.sy
Directoryruntime/
- bindings.c
O header soyuz.h (com a API de RC, listas e mapas) fica disponível via -I automaticamente.
Language Server (LSP)
Section titled “Language Server (LSP)”O binário soyuz-lsp é publicado junto com soyuz em cada release. Configure seu editor para apontar para ele:
require('lspconfig').soyuz.setup { cmd = { 'soyuz-lsp' }, filetypes = { 'soyuz' }, root_dir = require('lspconfig.util').root_pattern('soyuz.toml'),}Instale a extensão Soyuz Language Support ou configure manualmente em .vscode/settings.json:
{ "soyuz.languageServerPath": "/usr/local/bin/soyuz-lsp"}O LSP oferece: diagnósticos em tempo real, hover com tipos, completions, inlay hints e formatação de código.