Skip to content

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.


Baixe o soyuz-linux-x64 na página de Releases e mova para o PATH:

Terminal window
chmod +x soyuz-linux-x64
sudo mv soyuz-linux-x64 /usr/local/bin/soyuz
Terminal window
git clone https://github.com/VandeJr/soyuz
cd soyuz
make build # gera ./soyuz e ./soyuz-lsp
make install # instala em ~/.local/bin por padrão

Cria um projeto Soyuz com a estrutura mínima necessária.

Terminal window
soyuz new <nome> # projeto binário (executável)
soyuz new --lib <nome> # projeto biblioteca

Projeto binário — gera:

  • Directoryhello/
    • soyuz.toml
    • main.sy

Projeto biblioteca — gera:

  • Directorymylib/
    • soyuz.toml
    • lib.sy
[project]
name = "hello"
version = "0.1.0"
type = "binary" # ou "library"
entry = "main.sy"
[packages]
# aliases para imports locais (ver Módulos)

Compila o projeto ou um arquivo avulso.

Execute dentro de um diretório que contenha soyuz.toml:

Terminal window
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.
Terminal window
soyuz build [-o saída] <arquivo.sy>
Terminal window
soyuz build main.sy # output: ./output
soyuz build -o meu_app main.sy # output: ./meu_app

Ativa -O2 no Clang. Útil para distribuição; desnecessário durante o desenvolvimento.


Compila para um diretório temporário, executa o binário e apaga em seguida.

Terminal window
soyuz run # usa entry do soyuz.toml
soyuz run <arquivo.sy> # compila e executa um arquivo avulso
soyuz run --release # build otimizado antes de executar
soyuz run <arquivo.sy> -- arg1 arg2 # passa argumentos ao programa
Terminal window
# Criar projeto, rodar e verificar argumentos
soyuz new demo && cd demo
soyuz run -- alpha beta
main.sy
import @soyuz/prelude
fn main() {
val a = args()
print("recebeu $(a.size()) argumentos")
}

[project]
name = "minha-app" # nome do projeto e do binário gerado
version = "0.1.0" # semver livre — apenas documentação por enquanto
type = "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/modulo
utils = "lib/utils"
http = "lib/http"

Com [packages] definido, você usa @<alias>/<modulo> nos imports:

import (
{ soma } from @utils/math
{ GET } from @http/client
)

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.


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.


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'),
}

O LSP oferece: diagnósticos em tempo real, hover com tipos, completions, inlay hints e formatação de código.