📚 Biblioteca Padrão
Documentação completa de todas as funções e bibliotecas nativas da linguagem Sol.
🌐 Biblioteca Global (Base)
funções básicas disponíveis globalmente em qualquer script.
afirme (condição, [mensagem])
Verifica se uma condição é verdadeira. Se for falsa, lança um erro com a mensagem fornecida.
condição: Qualquer - A expressão a ser testada.mensagem: Texto (opcional) - Mensagem de erro caso a condição falhe.
afirme(10 > 5, "Erro impossível") -- Passa
afirme(falso, "Isso vai parar o programa") -- Erro
avise (mensagem)
Emite um aviso no console sem interromper o programa.
mensagem: Texto - O aviso a ser exibido.
avise("Isso é apenas um aviso.")
carregue (código, [nome_chunk])
Carrega um trecho de código Sol (string) e retorna como função.
código: Texto - O código fonte a ser compilado.nome_chunk: Texto (opcional) - Nome para mensagens de erro.
Função (se sucesso) ou nulo e mensagem de erro.
local f = carregue("retorne 10 + 20")
exiba(f()) -- 30
carregue_arquivo (caminho)
Carrega um arquivo Sol e retorna seu conteúdo como uma função executável.
caminho: Texto - Caminho para o arquivo.
Função (se sucesso) ou nulo e mensagem de erro.
local script = carregue_arquivo("meu_script.sol")
script() -- Executa o arquivo
chame_protegido (função, [args...])
Executa uma função em modo protegido (pcall). Se houver erro, retorna falso e a mensagem.
função: Função - A função a ser chamada.args: Variável - Argumentos para a função.
Lógico (sucesso/falha) e resultados da função ou mensagem de erro.
local ok, erro = chame_protegido(function() error("Boom!") end)
se não ok então exiba("Erro capturado:", erro) fim
colete_lixo ([opção], [arg])
Interage com o Coletor de Lixo (Garbage Collector).
opção: Texto - "collect", "count", "stop", "restart".
colete_lixo("collect") -- Força uma coleta completa
converta_para_número (valor, [base])
Tenta converter o valor para número.
valor: Texto/Número - Valor a converter.base: Inteiro (opcional) - Base numérica (2-36). Padrão 10.
Número ou nulo se falhar.
local n = converta_para_número("123") -- 123
local hex = converta_para_número("FF", 16) -- 255
converta_para_texto (valor)
Converte qualquer valor para sua representação em texto.
valor: Qualquer - Valor a converter.
Texto.
local s = converta_para_texto(123) -- "123"
defina_metatabela (tabela, metatabela)
Define a metatabela de uma tabela.
tabela: Tabela - A tabela alvo.metatabela: Tabela/Nulo - A nova metatabela.
A própria tabela.
defina_metatabela(obj, {__índice = Classe})
execute_arquivo (caminho)
Carrega e executa um arquivo Sol imediatamente.
caminho: Texto - Caminho do arquivo.
execute_arquivo("config.sol")
exiba (valores...)
Mostra valores na saída Padrão (console).
valores: Qualquer - Lista de valores para exibir.
exiba("Olá", "Mundo", 2026)
lance_erro (mensagem, [nível])
Interrompe a execução com uma mensagem de erro.
mensagem: Texto - A mensagem de erro.nível: Inteiro (opcional) - Nível da pilha onde ocorreu o erro.
lance_erro("Algo deu errado!")
obtenha_metatabela (valor)
Retorna a metatabela associada ao valor.
valor: Qualquer - O valor para consultar.
Tabela ou nulo.
local meta = obtenha_metatabela(obj)
obtenha_pares (tabela)
Iterador para percorrer todas as chaves e valores de uma tabela.
tabela: Tabela - A tabela a iterar.
para k, v em obtenha_pares(tab) faça
exiba(k, v)
fim
obtenha_pares_indexados (tabela)
Iterador para percorrer apenas índices numéricos sequenciais (array).
tabela: Tabela - A tabela a iterar.
para i, v em obtenha_pares_indexados(lista) faça
exiba(i, v)
fim
obtenha_tipo (valor)
Retorna o tipo do valor como string ("numero", "texto", "tabela", "funcao", "usuario", "filamento", "nulo").
valor: Qualquer - O valor a inspecionar.
Texto.
exiba(obtenha_tipo(10)) -- "numero"
exiba(obtenha_tipo("Olá")) -- "texto"
selecione (índice, ...)
Retorna todos os argumentos após o índice especificado. Se índice for "#", retorna o número total de argumentos.
índice: Inteiro/Texto - Posição inicial ou "#"....: Variável - Argumentos.
Múltiplos valores.
selecione(2, "a", "b", "c") -- Retorna "b", "c"
exiba(selecione("#", "a", "b", "c")) -- 3
➗ Matemática (math)
funções Matemáticas. Importe com local mat = importe("matematica").
arredonde_para_piso (x)
Arredonda um número para baixo (floor).
x: Número - O valor a arredondar.
Inteiro.
mat.arredonde_para_piso(3.9) -- 3
arredonde_para_teto (x)
Arredonda um número para cima (ceil).
x: Número - O valor a arredondar.
Inteiro.
mat.arredonde_para_teto(3.1) -- 4
converta_para_graus (rad)
Converte um ângulo de radianos para graus.
rad: Número - ângulo em radianos.
Número (graus).
local g = mat.converta_para_graus(mat.pi) -- 180
converta_para_inteiro (x)
Tenta converter um número ou string para um valor inteiro.
x: Número/Texto - O valor a converter.
Inteiro ou nulo.
local int = mat.converta_para_inteiro(3.0) -- 3
converta_para_radianos (graus)
Converte um ângulo de graus para radianos.
graus: Número - Ângulo em graus.
Número (radianos).
local rad = mat.converta_para_radianos(180) -- 3.14159...
defina_semente_aleatória (x)
Define a semente (seed) para o gerador de números pseudo-aleatórios.
x: Inteiro - A semente.
mat.defina_semente_aleatória(os.tempo())
gere_aleatório ([m], [n])
Gera números pseudo-aleatórios.
- Sem argumentos: Retorna real no intervalo [0, 1).
m: Retorna inteiro no intervalo [1, m].m, n: Retorna inteiro no intervalo [m, n].
Número.
local dado = mat.gere_aleatório(1, 6)
obtenha_cosseno (rad)
Retorna o cosseno de um ângulo.
rad: Número (radianos).
Número.
obtenha_seno (rad)
Retorna o seno de um ângulo.
rad: Número (radianos).
Número.
obtenha_tangente (rad)
Retorna a tangente de um ângulo.
rad: Número (radianos).
Número.
obtenha_exponencial (x)
Calcula a exponencial e^x.
x: Número.
Número.
obtenha_logaritmo (x, [base])
Calcula o logaritmo de x.
x: Número.base: Número (opcional) - Padrão é e (log natural).
Número.
obtenha_máximo (x, ...)
Retorna o maior valor entre os argumentos.
x, ...: Números.
Número.
obtenha_mÃnimo (x, ...)
Retorna o menor valor entre os argumentos.
x, ...: Números.
Número.
obtenha_raiz_quadrada (x)
Calcula a raiz quadrada de x.
x: Número não-negativo.
Número.
obtenha_valor_absoluto (x)
Retorna o valor absoluto (módulo) de x.
x: Número.
Número positivo.
frexp (x)
Decompõe x em mantissa e expoente (x = m * 2^e).
x: Número.
Número (mantissa) e Inteiro (expoente).
ldexp (m, e)
Recompõe um número a partir da mantissa e expoente (inverso de frexp).
m: Número - Mantissa.e: Inteiro - Expoente.
Número (m * 2^e).
verifique_menor_que_sem_sinal (m, n)
Verifica se m < n tratando ambos como inteiros sem sinal.
m, n: Inteiros.
Booleano.
separe_fração_inteiro (x)
Separa a parte inteira e a parte fracionária de x.
x: Número.
Número (parte inteira) e Número (parte fracionária).
obtenha_resto_flutuante (x, y)
Retorna o resto da divisão de x por y (equivalente a fmod).
x, y: Números.
Número.
📘 Texto (texto)
Manipulação de strings. Métodos também disponÃveis via : em strings. Importe com local txt = importe("texto").
combine (s, Padrão)
Busca a primeira ocorrência do Padrão na string e retorna as capturas (match).
s: Texto - A string onde buscar.Padrão: Texto - O Padrão Lua simplificado.
Texto(s) capturado(s) ou nulo.
local dia, mes = txt.combine("Hoje é 13/01", "(%d+)/(%d+)") -- "13", "01"
combine_globalmente (s, Padrão)
Retorna um iterador para todas as ocorrências do Padrão no texto (gmatch).
s: Texto - A string onde buscar.Padrão: Texto - O Padrão a buscar repetidamente.
Iterador (Função).
para palavra em txt.combine_globalmente("Oi mundo sol", "%a+") faça ... fim
converta_para_maiúscula (s)
Retorna uma cópia do texto com todas as letras em maiúsculo.
s: Texto.
Texto.
converta_para_minúscula (s)
Retorna uma cópia do texto com todas as letras em minúsculo.
s: Texto.
Texto.
crie_caractere (código...)
Retorna uma string composta pelos caracteres correspondentes aos códigos numéricos fornecidos.
código...: Inteiros - Códigos ASCII/Byte.
Texto.
txt.crie_caractere(65, 66, 67) -- "ABC"
desempacote (formato, string)
Extrai valores de uma string binária seguindo um formato (similar ao struct.unpack de C).
formato: Texto - String de formato.string: Texto - Dados binários.
Múltiplos valores desempacotados.
empacote (formato, v1, v2...)
Empacota valores em uma string binária seguindo um formato (similar ao struct.pack de C).
formato: Texto - String de formato.v1, v2...: Valores a empacotar.
Texto (Dados binários).
obtenha_tamanho_pacote (formato)
Retorna o tamanho em bytes que o formato de empacotamento ocupará.
formato: Texto.
Inteiro.
despeje (f)
Retorna a representação binária (bytecode) de uma função Sol.
f: Função.
Texto (bytecode) ou nulo.
encontre (s, Padrão, [ini], [simples])
Retorna a posição inicial e final da primeira ocorrência de um Padrão no texto.
s: Texto - Onde buscar.Padrão: Texto - O que buscar.ini: Inteiro (opcional) - Onde começar.simples: Booleano (opcional) - Se verdadeiro, desativa padrões regex.
Inteiro (inÃcio), Inteiro (fim), ou nulo.
local i, j = txt.encontre("Olá Sol", "Sol") -- 5, 7
formate (formato, ...)
Retorna uma string formatada seguindo o estilo printf.
formato: Texto - O formato....: Valores a formatar.
Texto.
txt.formate("Valor: %.2f", 10.567) -- "Valor: 10.57"
inverta (s)
Inverte a ordem dos caracteres da string.
s: Texto.
Texto.
obtenha_byte (s, [i], [j])
Retorna os códigos numéricos (ASCII/Unicode) dos caracteres da string.
s: Texto.i: Inteiro (opcional) - InÃcio.j: Inteiro (opcional) - Fim.
Inteiros (múltiplos valores).
obtenha_comprimento (s)
Retorna o tamanho da string em bytes. O operador # faz o mesmo.
s: Texto.
Inteiro.
obtenha_subtexto (s, i, [j])
Extrai uma parte da string (substring) do Ãndice i ao j.
s: Texto.i: Inteiro - InÃcio.j: Inteiro (opcional) - Fim (Padrão -1).
Texto.
txt.obtenha_subtexto("Teste", 1, 3) -- "Tes"
repita (s, n)
Retorna uma string contendo n cópias de s concatenadas.
s: Texto.n: Inteiro.
Texto.
txt.repita("Oi", 3) -- "OiOiOi"
substitua_globalmente (s, Padrão, repl, [n])
Substitui ocorrências do Padrão no texto por uma string de substituição (gsub).
s: Texto.Padrão: Texto.repl: Texto/Tabela/Função - O substituto.n: Inteiro (opcional) - Limite de substituições.
Texto (resultado) e Inteiro (número de substituições).
txt.substitua_globalmente("Banana", "a", "o") -- "Bonono"
📊 Tabela (tabela)
Manipulação de tabelas. Importe com local tab = importe("tabela").
concatene (lista, [sep], [i], [j])
Concatena os elementos de uma lista em uma única string, separados por sep.
lista: Tabela.sep: Texto (opcional) - Separador.i: Inteiro (opcional) - InÃcio.j: Inteiro (opcional) - Fim.
Texto.
tab.concatene({"A", "B", "C"}, "-") -- "A-B-C"
crie (n, [v])
Cria uma tabela nova pré-alocada com n elementos.
n: Inteiro - Capacidade da sequência.v: Qualquer (opcional) - Valor inicial.
Tabela.
desempacote (lista, [i], [j])
Retorna os elementos da tabela como valores soltos (argumentos).
lista: Tabela.i: Inteiro (opcional) - InÃcio (Padrão 1).j: Inteiro (opcional) - Fim (Padrão #lista).
Múltiplos valores.
exiba(tab.desempacote({10, 20})) -- 10 20
empacote (...)
Cria uma nova tabela contendo todos os argumentos e um campo 'n' com o total.
...: Valores a empacotar.
Tabela (com campo n).
insira (lista, [pos], valor)
Insere um elemento na lista em uma posição especÃfica, deslocando os outros.
lista: Tabela.pos: Inteiro (opcional) - Posição de inserção. Padrão: fim.valor: Qualquer - Elemento a inserir.
tab.insira(t, 1, "Topo")
mova (a1, f, e, t, [a2])
Move elementos da tabela a1 para a tabela a2 (ou a mesma).
a1: Tabela - Origem.f: Inteiro - Ãndice inicial fonte.e: Inteiro - Ãndice final fonte.t: Inteiro - Ãndice inicial destino.a2: Tabela (opcional) - Destino (Padrão a1).
Tabela (a2).
ordene (lista, [comp])
Ordena os elementos de um array em ordem crescente ou usando uma função de comparação.
lista: Tabela.comp: Função (opcional) - Função que recebe (a,b) e retorna verdadeiro se a < b.
tab.ordene(t) -- Crescente
tab.ordene(t, function(a,b) retorne a > b fim) -- Decrescente
remova (lista, [pos])
Remove um elemento da lista na posição especificada.
lista: Tabela.pos: Inteiro (opcional) - Posição a remover. Padrão: último.
Valor removido.
🖥️ Terminal (terminal)
Acesso a arquivos e terminal. Importe com local term = importe("terminal").
abra (arquivo, [modo])
Abre um arquivo. Modos: "r" (leitura), "w" (escrita), "a" (anexo).
local f = term.abra("dados.txt", "w")
f:escreva("Olá Arquivo")
f:feche()
abra_processo (prog, [modo])
Inicia um processo e retorna um handle de arquivo (popen).
crie_arquivo_temporário ()
Retorna um arquivo temporário aberto para leitura/escrita.
defina_entrada (arquivo)
Define o arquivo Padrão para leitura (stdin).
defina_saÃda (arquivo)
Define o arquivo Padrão para escrita (stdout).
despeje (arquivo)
Salva dados do buffer no arquivo.
escreva (...)
Escreve na saÃda Padrão.
feche ([arquivo])
Fecha o arquivo dado ou o Padrão.
itere_linhas ([arquivo])
Iterador que lê o arquivo linha por linha.
para linha em term.itere_linhas("texto.txt") faça ... fim
leia ([fmt])
Lê da entrada Padrão. Formatos: "a" (tudo), "l" (linha), "n" (número).
obtenha_tipo (obj)
Verifica se é um arquivo aberto ou fechado.
⚙️ Sistema Operacional (sistema_operacional)
Interação com o sistema operacional. Importe com local so = importe("sistema_operacional").
calcule_diferença_tempo (t2, t1)
Retorna a diferença em segundos entre dois tempos.
crie_pasta (caminho)
Cria um diretório (mkdir).
defina_localidade (locale, [categoria])
Define a localidade do programa (setlocale).
execute ([comando])
Executa um comando do sistema.
so.execute("dir")
gere_nome_temporário ()
Gera um nome de arquivo único.
obtenha_data ([formato], [tempo])
Retorna a data/hora formatada.
so.obtenha_data("%d/%m/%Y") -- "13/01/2026"
obtenha_relógio ()
Retorna o tempo de CPU usado pelo programa (clock).
obtenha_tempo ([tabela])
Retorna o timestamp atual (epoch) ou cria a partir de uma tabela.
obtenha_variável_ambiente (nome)
Lê uma variável de ambiente.
local path = so.obtenha_variável_ambiente("PATH")
remova (arquivo)
Apaga um arquivo.
renomeie (antigo, novo)
Renomeia um arquivo.
saia ([codigo])
Encerra o programa.
🧶 Corrotina (corrotina)
Programação cooperativa. Importe com local co = importe("corrotina").
ceda (valores...)
Suspende a execução da corrotina atual.
co.ceda("pausando")
crie (f)
Cria uma nova corrotina. Retorna uma thread.
local c = co.crie(function() exiba("oi") fim)
envolva (f)
Cria uma corrotina e retorna uma função para iniciá-la.
feche (co)
Fecha uma corrotina e libera recursos.
obtenha_estado (co)
Retorna o estado: "executando", "suspenso", "normal" ou "morto".
obtenha_executando ()
Retorna a corrotina atual e um booleano (se é a principal).
retome (co, [valores...])
Inicia ou continua a execução da corrotina.
co.retome(c)
verifique_pode_ceder ()
Verifica se a corrotina atual pode ceder (yield).
📦 Pacote (pacote)
Gerenciamento de módulos. Importe com local pac = importe("pacote").
busque_caminho (nome, caminho, [sep], [rep])
Procura por um arquivo em um caminho.
carregue_biblioteca (lib, func)
Carrega uma biblioteca C dinâmica (DLL/SO).
importe (modname)
Carrega um módulo. Função global Padrão.
local m = importe("meu_modulo")
🔤 UTF-8 (utf8)
Manipulação de strings UTF-8. Importe com local u8 = importe("utf8").
crie_caractere (códigos...)
Cria uma string UTF-8 a partir de code points.
itere_códigos (s, [lax])
Iterador sobre code points UTF-8.
para p, c em u8.itere_códigos("Ação") faça ... fim
obtenha_comprimento (s, [i], [j])
Retorna o número de caracteres UTF-8 (não bytes).
obtenha_deslocamento (s, n, [i])
Retorna o deslocamento em bytes de um caractere.
obtenha_ponto_código (s, [i], [j])
Retorna os code points da string.
Padrão_caractere
Padrão de string que combina com um caractere UTF-8.
🐞 Depuração (depuracao)
Ferramentas de depuração. Importe com local dep = importe("depuracao").
defina_gancho (thread, hook, mask, [count])
Define uma função de gancho (hook) para monitorar execução.
defina_local (thread, nÃvel, n, valor)
Define o valor de uma variável local na pilha.
defina_metatabela (valor, tabela)
Define a metatabela de qualquer valor.
defina_valor_acima (f, up, valor)
Define o valor de um upvalue.
defina_valor_usuário (u, valor, [n])
Define o valor associado a um userdata.
entre_depuração ()
Entra em modo interativo de depuração.
id_valor_acima (f, n)
Retorna um ID único para o upvalue.
junte_valor_acima (f1, n1, f2, n2)
Faz um upvalue de f1 referenciar o mesmo valor de f2.
obtenha_gancho ([thread])
Retorna as configurações atuais do gancho.
obtenha_informação ([thread], f, [opções])
Retorna informações sobre uma função ou nÃvel da pilha.
obtenha_local ([thread], nÃvel, n)
Retorna o nome e valor de uma variável local.
obtenha_metatabela (valor)
Retorna a metatabela de qualquer valor.
obtenha_rastreio ([thread], [msg], [nÃvel])
Retorna uma string com o stack trace.
obtenha_registro ()
Retorna a tabela de registro (Registry).
obtenha_valor_acima (f, up)
Retorna o nome e valor de um upvalue.
obtenha_valor_usuário (u, [n])
Retorna o valor associado a um userdata.
âš¡ Filamento (filamento)
Tarefas assÃncronas com corrotinas gerenciadas. Importe com local fil = importe("filamento").
durma (ms)
Pausa a execução da tarefa atual por milissegundos.
fil.durma(1000)
inicie_loop ()
Inicia o loop de eventos para processar tarefas.
fil.inicie_loop()
tarefa (f)
Cria e agenda uma nova tarefa (corrotina gerenciada).
fil.tarefa(function() exiba("AssÃncrono!") fim)
⚡ Paralelismo (paralelo)
Execução em threads do SO. Importe com local par = importe("paralelo").
canal ()
Cria um canal de comunicação entre threads.
local c = par.canal()
envie (canal, msg)
Envia uma mensagem (string) para o canal.
execute (script, [canal])
Inicia uma nova thread executando o script Sol.
par.execute("exiba('Nova Thread')", c)
receba (canal)
Bloqueia até receber uma mensagem do canal.
local msg = par.receba(c)
🧪 Teste (teste)
Framework de testes unitários. Importe com local t = importe("teste").
afirme (cond, [msg])
Afirma que a condição é verdadeira.
afirme_contem (tabela, valor)
Verifica se a tabela contém o valor.
afirme_diferente (a, b)
Verifica desigualdade.
afirme_erro (f)
Verifica se a função lança erro.
afirme_falso (v)
Verifica se é falso.
afirme_igual (a, b)
Verifica igualdade.
afirme_maior (a, b)
Verifica se a > b.
afirme_maior_igual (a, b)
Verifica se a >= b.
afirme_menor (a, b)
Verifica se a < b.
afirme_menor_igual (a, b)
Verifica se a <= b.
afirme_não_nulo (v)
Verifica se não é nulo (nil).
afirme_nulo (v)
Verifica se é nulo (nil).
afirme_sem_erro (f)
Verifica se a função executa sem erros.
afirme_tamanho (n, t)
Verifica o tamanho da tabela/string.
afirme_tipo (tipo, v)
Verifica o tipo do valor.
afirme_vazio (t)
Verifica se a tabela está vazia.
afirme_verdadeiro (v)
Verifica se é verdadeiro.
antes_de_cada (f)
Executa antes de cada caso de teste.
antes_de_todos (f)
Executa uma vez antes de todos os testes.
caso (nome, f)
Define um caso de teste.
depois_de_cada (f)
Executa após cada caso de teste.
depois_de_todos (f)
Executa uma vez após todos os testes.
descreva (desc)
Define a descrição do grupo de testes atual.
execute ()
Inicia a execução dos testes cronometrados.
falhe (msg)
Força uma falha no teste.
grupo (nome, f)
Define um grupo de testes.
pule (msg)
Pula o teste atual.
reinicie ()
Reinicia o estado dos testes.
relatorio ()
Exibe o relatório final dos testes.
📄 NDS (Notação de Dados Sol)
Biblioteca para serialização e deserialização de dados no formato Sol nativo.
O formato NDS é uma alternativa ao JSON que usa sintaxe Sol/Lua, tornando-o mais natural para desenvolvedores Sol.
retorne {}.
-- arquivo.nds
nome = "João"
idade = 30
endereco = {
cidade = "São Paulo",
cep = "01234-567"
}
nds.carregue (texto)
Converte uma string no formato NDS para uma tabela Sol.
texto: Texto - Conteúdo NDS a ser parseado.
Tabela ou (nulo, mensagem de erro).
local dados = nds.carregue([[
nome = "Maria",
ativo = verdadeiro
]])
exiba(dados.nome) -- "Maria"
nds.carregue_arquivo (caminho)
Lê um arquivo NDS e retorna seu conteúdo como tabela.
caminho: Texto - Caminho para o arquivo .nds.
Tabela ou (nulo, mensagem de erro).
local config = nds.carregue_arquivo("config.nds")
exiba(config.servidor)
nds.converta (tabela)
Converte uma tabela Sol para string no formato NDS.
tabela: Tabela - A tabela a serializar.
Texto no formato NDS.
local dados = {nome = "João", idade = 25}
local texto = nds.converta(dados)
exiba(texto)
-- {
-- nome = "João",
-- idade = 25
-- }
nds.salve (caminho, tabela)
Salva uma tabela em um arquivo no formato NDS.
caminho: Texto - Caminho do arquivo de destino.tabela: Tabela - Dados a salvar.
verdadeiro ou (falso, mensagem de erro).
local dados = {usuario = "admin", nivel = 10}
nds.salve("usuario.nds", dados)
nds.converta_arquivo (tabela)
Converte uma tabela para string no formato de arquivo NDS (sem o wrapper de tabela).
tabela: Tabela - A tabela a serializar.
Texto pronto para salvar em arquivo .nds.
local dados = {nome = "João", idade = 25}
local conteudo = nds.converta_arquivo(dados)
-- nome = "João"
--
-- idade = 25